当你在静态方法中时,是否有办法获取类名(包含名称的字符串)而不输入类名本身?
例如,输入MyClass.class.getName()
并不仅仅是"Myclass"
。
答案 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,这样您就不必输入那么多:)