4

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

当您在静态方法中时,有没有办法在不输入类名本身的情况下获取类名(包含名称的字符串)?

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

4

3 回答 3

14

您可以使用匿名内部类:

class Test {
  public static void main(String[] args) {
    String className = new Object(){}.getClass().getEnclosingClass().getName();
    System.out.println(className);
  }
}
于 2009-07-01T05:31:24.843 回答
11

您可以通过创建(而不是抛出)新异常并检查其堆栈跟踪来做到这一点。您的类将是第零个元素,因为它是异常的起源。感觉有点不对劲,但它会起作用。

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

您可以对 Thread 类执行相同的操作。这对我来说似乎更干净,但线路稍长。您的类现在是堆栈跟踪中的第一个元素,而不是第零个元素。Thread.getStackTrace() 是第零个。

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

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

相反,如果您使用 IDE 的重构函数重命名 MyClass,它将用 RenamedClass.class.getName() 替换 MyClass.class.getName()。如果您在其中放置一个字符串,则必须手动进行。

于 2009-07-01T05:08:52.407 回答
1

如果只是节省一些打字的问题,那就别想了。使用 MyClass.class 允许所有重构工具识别并正确处理您的代码。

当你选择用 Java 编程时,你会输入很多。使用可以帮助您的 IDE,这样您就不必输入太多了 :)

于 2009-07-01T11:45:45.747 回答