Краткая версия: Мне нужно найти способ в Java, чтобы найти предыдущий Method
в стеке вызовов (обратите внимание на капитал «M» в методе - мне нужен фактический объект java.lang.reflect.Method
).Найти метод вызова в Java
Справочная информация: Я работаю над расширением концепции Google Guava Preconditions.checkNotNull(...)
, которая позволит программисту одновременно проверять ВСЕ параметры для нуля и строить NPE на основе имен параметров вызывающего метода. Например:
public class MyClass
{
public void myMethod(Object arg1, Integer arg2, String arg3)
{
MyPreconditions.checkAllNotNull(arg1, arg2, arg3);
}
}
Таким образом, если первый аргумент был нулевым, тем NPE может прочитать arg1 cannot be null (MyClass:myMethod(Object, Integer, String)
Я уже работал, как получить вызывающий Class
и я могу получить имена параметров с помощью Spring LocalVariableTableParameterNameDiscoverer
(или через библиотеку Paranamer) у меня есть Method
. Единственная часть, которую я не могу понять, - это как получить Method
.
Я знаю, что вы можете использовать трассировку стека, чтобы получить метод имя, но это не помогает, если метод переопределен. Есть ли способ (даже с внутренними классами com.sun) получить фактический стек? В качестве альтернативы, я могу получить номер строки для вызывающего метода, так есть ли способ найти номер строки Method
как извлеченный из объекта Class
?
Дубликат http://stackoverflow.com/questions/421280/in-java-how-do-i-find-the-caller-of-a-method-using-stacktrace-or-reflection –