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

时间:2009-07-01 05:04:46

标签: java static-methods classname

  

可能重复:
  Getting the class name from a static method in Java

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

例如,输入MyClass.class.getName()并不仅仅是"Myclass"

3 个答案:

答案 0 :(得分:14)

您可以使用匿名内部类:

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

答案 1 :(得分:11)

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

System.out.println( new Exception().getStackTrace()[0].getClassName() );

你可以对Thread类做同样的事情。这对我来说似乎更干净,但线条稍长​​。你的类现在是stacktrace中的第一个元素而不是第0个元素。 Thread.getStackTrace()是第0个。

System.out.println( Thread.currentThread().getStackTrace()[1].getClassName() );
  

例如,输入MyClass.class.getName()并不比“Myclass”更有用。

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

答案 2 :(得分:1)

如果仅仅是保存一些打字的问题,那么不要考虑它。使用MyClass.class允许所有重构工具识别并正确使用您的代码。

当您选择使用Java编程时,您将输入很多内容。使用可以帮助您的IDE,这样您就不必输入那么多:)