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

Java 是否可以从静态方法获取类名?,java,static-methods,classname,Java,Static Methods,Classname,可能重复: 当您在静态方法中时,有没有一种方法可以在不键入类名本身的情况下获取类名(包含名称的字符串) 例如,键入MyClass.class.getName()并不比只键入“MyClass”更有用。您可以通过创建(而不是引发)新异常并检查其堆栈跟踪来执行此操作。您的类将是第0个元素,因为它是异常的起源。感觉有点不对劲,但它会起作用的 System.out.println( new Exception().getStackTrace()[0].getClassName() ); 您可以对Thr

可能重复:

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

例如,键入
MyClass.class.getName()
并不比只键入
“MyClass”
更有用。您可以通过创建(而不是引发)新异常并检查其堆栈跟踪来执行此操作。您的类将是第0个元素,因为它是异常的起源。感觉有点不对劲,但它会起作用的

System.out.println( new Exception().getStackTrace()[0].getClassName() );
您可以对Thread类执行相同的操作。这对我来说似乎更干净,但线路稍微长一点。您的类现在是stacktrace中的第一个元素,而不是第零个元素。getStackTrace()是第0个线程

System.out.println( Thread.currentThread().getStackTrace()[1].getClassName() );
例如,键入MyClass.class.getName()并不比只键入“MyClass”更有用


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

可以使用匿名内部类:

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

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


当你选择用Java编程时,你会输入很多。使用一个IDE,这样你就不必输入那么多:)

哦。。。好啊这是一种更安全的方法,但无论如何都必须键入类名。这正是我试图避免的。从你和其他人的回答来看,我看到语言没有提供一种干净的方式来做到这一点,所以我认为键入这样一个难听的句子是不值得的,因为键入类名有几个缺点(主要是冗余)。静态方法只与声明它的类相关联。在我看来,除了通过名称显式引用类之外,不需要有访问类的方法。