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



