Короткая версия: мне нужно найти способ в Java найти предыдущий Method
в стеке вызовов (обратите внимание на заглавную букву 'M' в методе - мне нужен фактический java.lang.reflect.Method
объект).
Справочная информация: я работаю над расширением концепции 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
.
Я знаю, что вы можете использовать трассировку стека для получения метода name , но этоне помогает, если метод переопределен.Есть ли способ (даже с внутренними классами com.sun) получить реальный стек?Кроме того, я могу получить номер строки для вызывающего метода, поэтому есть ли способ найти номер строки Method
, полученный из объекта Class
?