在Java中是否有办法在不引用对象的情况下找出我所在的类?我需要静态点的当前类名。这是一个例子:
public class MyClass {
// is this possible?
private static final String myClassName = ???;
// not like this
void someMethod(){
String className = this.getClass();
}
// or this
private static final String myClassName = MyClass.class;
}
整体问题是记录。我正在处理的项目的记录器需要类名,并且应该像这样声明:
private static final Logger LOGGER = LogHelper.getLogger(MyClass.class);
如果有更通用的方法,复制记录器会更容易。
我需要在多个类中使用此代码,并且只需复制代码而不是每次都替换“MyClass.class”会很好。
不幸的是,不同的方法与该项目的惯例不相容。
答案 0 :(得分:1)
像eclipse这样的编译器允许你这样做,例如看看这个页面:
http://www.ibm.com/developerworks/opensource/tutorials/os-eclipse-code-templates/
并在新模板中使用它:
private static final Logger LOGGER = LogHelper.getLogger(${primary_type_name}.class
答案 1 :(得分:0)
简而言之,可能没有更简单或更通用的方法来做到这一点。虽然我不确定您使用的确切记录器库,但主要的事实仍然是您必须提供要记录到记录器的类。
它确实意味着额外的打字,但是没有更简单,更容易理解或更安全的现实方法 - 任何过于复杂并使用大量反射来提取类名的东西都需要进行测试以确保它始终返回正确的类,这比使用MyClass.class
基本更多的努力。