问题:在Java里面怎么样在静态方法中调用getClass()?
我有一个类,它必须包含一些静态方法,在这些静态方法里面我需要像下面那样调用getClass() 方法
public static void startMusic() {URL songPath = getClass().getClassLoader().getResource("background.midi");
}
但是 Eclipse 告诉我:
Cannot make a static reference to the non-static method getClass() from the type Object
怎么样要修复这个编译时错误鸭
What is the appropriate way to fix this compile time error?
回答
答案是:
只需使用classname .class
代替getClass()
。
声明 Loggers
这获得了很多的关注,因为这个具体的用例提供了一种插入日志声明的简单方法,所以我想在此补充一下我的想法。日志框架通常希望日志被限制在特定的上下文中,比如一个全限定的类名。因此,它们不修改就直接不能复制粘贴。其他答案中提供了声明paste-safe日志的建议,但是他们都有一些缺点的例如加入了运行时的自检查和字节码膨胀。我不推荐这样。Copy-paste是编辑器需要关心的,所以编辑器的解决方案就最正确的了。
在IntelliJ中,我推荐加入一个实时模板
】
-
使用log作为缩写
-
使用
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger($CLASS$.class);
作为模板文本。 -
点击编辑变量并使用表达式className()去添加类
-
选中复选框用来重新格式化和缩短 FQ 的名称。
-
将上下文更改为Java:声明。
你现在如果直接打入 log,它就会自动扩展成为
private static final Logger logger = LoggerFactory.getLogger(ClassName.class);
和自动格式化并且优化你的导入
文章翻译自Stack Overflow:https://stackoverflow.com/questions/8275499/how-to-call-getclass-from-a-static-method-in-java