加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Java中查找调用Method

发布时间:2020-12-14 19:18:52 所属栏目:Java 来源:网络整理
导读:精简版: 我需要在Java中找到一种方法来在调用堆栈中找到前面的Method(注意Method中的大写M 我需要实际的java.lang.reflect.Method对象). 背景: 我正在研究Google Guava Preconditions.checkNotNull()概念的扩展,它允许程序员同时检查所有参数是否为null,并

精简版:
我需要在Java中找到一种方法来在调用堆栈中找到前面的Method(注意Method中的大写’M’ – 我需要实际的java.lang.reflect.Method对象).

背景:
我正在研究Google Guava Preconditions.checkNotNull(…)概念的扩展,它允许程序员同时检查所有参数是否为null,并根据调用方法的参数名称构造NPE.例如:

public class MyClass
{
    public void myMethod(Object arg1,Integer arg2,String arg3)
    {
        MyPreconditions.checkAllNotNull(arg1,arg2,arg3);
    }
}

因此,如果第一个参数为null,那么NPE可能读取arg1不能为null(MyClass:myMethod(Object,Integer,String)

我已经研究了如何获取调用类,我可以通过Spring LocalVariableTableParameterNameDiscoverer(或通过Paranamer库)获取参数名称.我无法弄清楚的唯一部分是如何获得Method本身.

我知道您可以使用堆栈跟踪来获取方法名称,但如果重写该方法,则无效.有没有办法(即使是内部的com.sun类)来获得实际的堆栈?或者,我可以获取调用方法的行号,那么有没有办法找到从Class对象中检索的Method的行号?

最佳答案
Thread.getStackTrace()为您提供当前的堆栈跟踪.从那里你可以得到类名和方法名(即使方法被覆盖,你会在那里看到确切的类),并通过反射获得方法.

但是imo – 这很奇怪而且不需要.关于它的事情 – 你提供的消息大多已经存在于堆栈跟踪中,如果Preconditions调用失败将会生成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读