java.lang.Class.getEnclosingClass() 方法返回直接封闭类的底层类。如果这个类是一个顶级类此方法返回null。
项目中生成日志或者调用消息时,通常希望包含当前类的类名,如:
log.error("Exception happened in {}", getClass().getName());
但是对于静态方法不起作用,因为调用getClass()
时是调用的this.getClass()
,而静态方法没有this
。所以此时可以用 java.lang.Class.getEnclosingClass()
方法,如下:
package com.yzy.test;
public class Main1 {
public static void main(String[] args) {
System.out.println(new Object(){}.getClass().getEnclosingClass().getName());
}
}
输出:com.yzy.test.Main1
其中,new Object(){}
会建立一个Object的匿名子类的匿名对象,getEnclosingClass
则得到其外围类,也就是包含这个静态方法的类。
网友评论