我有一个类,它必须有一些静态方法。在这些静态方法中,我需要调用getClass()方法进行以下调用:
公共静态void startMusic(){
URL songPath=getClass().getClassLoader().getResource(“background.midi”);
}
但是Eclipse告诉我:
无法对非静态方法getClass()进行静态引用
从类型对象
修复此编译时错误的适当方法是什么
答案
只需使用classname.class而不是getClass()
申报伐木工人
由于这对于一个特定的用例(提供一种插入日志声明的简单方法)非常重要,我想我应该补充一下我的想法。日志框架通常期望日志被约束到特定的上下文中,比如说一个完全限定的类名。因此,如果不进行修改,它们是不可复制的。其他答案中提供了粘贴安全日志声明的建议,但它们也有缺点,如增加字节码或添加运行时内省。我不推荐这些。复制粘贴是一个编辑器问题,因此编辑器解决方案是最合适的
在IntelliJ中,我建议添加一个活动模板:
- 使用“log”作为缩写
- 使用
private static final org.slf4j.Logger Logger=org.slf4j.LoggerFactory.getLogger($CLASS$.CLASS)作为模板文本- 单击编辑变量并使用表达式
className()- 选中复选框以重新格式化和缩短FQ名称
- 将上下文更改为Java:declaration
- 单击编辑变量并使用表达式
现在,如果键入log<;选项卡>它将自动扩展到
私有静态最终记录器Logger=LoggerFactory.getLogger(ClassName.class);
并为您自动重新格式化和优化导入