java怎么在一个无参数的静态方法中获取调用它的Class?

写一个静态方法,这个静态方法没有形式任何参数,在方法内,获得调用该静态方法所在类的class。

比如在Test.Class内的方法中调用静态方法,不传入什么参数,直接在静态方法内获取Test.Class。

怎么做?最好能适应jdk17

阅读 2.3k
3 个回答

获取调用者 class 跟参数没关系,不需要强调这个。

通过获取堆栈信息,找到调用者的 class 是谁。

public static void test() {
    StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
    String className = stackTrace[2].getClassName();
    Class<?> clazz;
    try {
        clazz = Class.forName(className);
        System.out.println(clazz.getName());
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
MethodHandles.lookup().lookupClass();

或者

Thread.currentThread().getStackTrace()[1].getClassName()

第一种更好点,内部是调用

jdk.internal.reflect.Reflection#getCallerClass
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题