java.lang.Class.getEnclosingClas

2018-09-11  本文已影响0人  憨人Zoe

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 则得到其外围类,也就是包含这个静态方法的类。

上一篇下一篇

猜你喜欢

热点阅读