可能重复:
从 Java 中的静态方法获取类名
当您在静态方法中时,有没有办法在不输入类名本身的情况下获取类名(包含名称的字符串)?
例如,打字MyClass.class.getName()
并不比仅仅有用"Myclass"
。
可能重复:
从 Java 中的静态方法获取类名
当您在静态方法中时,有没有办法在不输入类名本身的情况下获取类名(包含名称的字符串)?
例如,打字MyClass.class.getName()
并不比仅仅有用"Myclass"
。
您可以使用匿名内部类:
class Test {
public static void main(String[] args) {
String className = new Object(){}.getClass().getEnclosingClass().getName();
System.out.println(className);
}
}
您可以通过创建(而不是抛出)新异常并检查其堆栈跟踪来做到这一点。您的类将是第零个元素,因为它是异常的起源。感觉有点不对劲,但它会起作用。
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()。如果您在其中放置一个字符串,则必须手动进行。
如果只是节省一些打字的问题,那就别想了。使用 MyClass.class 允许所有重构工具识别并正确处理您的代码。
当你选择用 Java 编程时,你会输入很多。使用可以帮助您的 IDE,这样您就不必输入太多了 :)