Java方法内部,获取当前方法相关信息

1.问题描述

在java开发中,会有这样的需求:在方法的内部,需要获取当前方法的名称、参数列表、或者返回值类型。在网上查阅相关资料,发现:Java方法内部,确实可以获取当前方法相关信息。考虑到知识体系化的积累,现对相关测试代码进行记录,方便后续之用。

2.测试用例

public class MethodTest {


    public static void main(String[] args) {
        testMethod("test");
    }
    public static String testMethod(Object test){
        Method enclosingMethod = new Object(){}.getClass().getEnclosingMethod();
        System.out.println(enclosingMethod);
        return null;
    }
}

运行上述代码,结果如下所示:
在这里插入图片描述
从结果可以看出,通过代码所示方式,能够获取到内部类所在的方法的全部详细信息。即,实现了在java内部,获取当前方法的全部信息。利用反射相关知识,可以获取到方法的名称、参数列表、返回值类型等。也可以基于此种思路,获取当前构造函数相关信息,当前类相关信息,等。
下面把部分参考的文字记录如下,后续探究时,可以基于此,进一步拓展。

小编典典
从技术上讲这将起作用…
String name = new Object(){}.getClass().getEnclosingMethod().getName();
但是,将在编译时创建一个新的匿名内部类(例如YourClass$1.class)。因此,这将为.class每个部署此技巧的方法创建一个文件。另外,在运行时每次调用时都会创建一个其他未使用的对象实例。因此,这可能是可以接受的调试技巧,但确实会带来大量开销。
该技巧的一个优点是getEncosingMethod()返回java.lang.reflect.Method值可用于检索方法的所有其他信息,包括注释和参数名称。这样就可以区分具有相同名称的特定方法(方法重载)。
请注意,根据JavaDoc的getEnclosingMethod()技巧,不应SecurityException使用相同的类加载器来加载内部类。因此,即使存在安全管理器,也无需检查访问条件。
必须getEnclosingConstructor()用于构造函数。在(命名的)方法之外的块中,getEnclosingMethod()返回null。

3.参数资源

Java 获取当前执行方法的名称

猜你喜欢

转载自blog.csdn.net/fanjianglin/article/details/109088177