是否可以从静态方法获取类名?

4 java static-methods classname

可能重复:
从Java中的静态方法获取类名

当你在静态方法中时,是否有办法获取类名(包含名称的字符串)而不键入类名本身?

例如,打字MyClass.class.getName()不仅仅是有用的"Myclass".

Chi*_*Chi 14

您可以使用匿名内部类:

class Test {
  public static void main(String[] args) {
    String className = new Object(){}.getClass().getEnclosingClass().getName();
    System.out.println(className);
  }
}
Run Code Online (Sandbox Code Playgroud)


ban*_*ity 11

您可以通过创建(不抛出)新的Exception并检查其堆栈跟踪来实现.你的类将是第0个元素,因为它是异常的起源.它有点不对劲,但它会起作用.

System.out.println( new Exception().getStackTrace()[0].getClassName() );
Run Code Online (Sandbox Code Playgroud)

您可以对Thread类执行相同的操作.这对我来说似乎更干净,但线条稍长​​.你的类现在是stacktrace中的第一个元素而不是第0个元素.Thread.getStackTrace()是第0个.

System.out.println( Thread.currentThread().getStackTrace()[1].getClassName() );
Run Code Online (Sandbox Code Playgroud)

例如,键入MyClass.class.getName()并不比"Myclass"更有用.

相反,如果使用IDE的重构函数重命名MyClass,它将使用RenamedClass.class.getName()替换MyClass.class.getName().如果你在那里放一个字符串,你将不得不手动完成.