如何在Java中从静态方法调用getClass()?

我有一个类,它必须有一些静态方法。在这些静态方法中,我需要调用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<选项卡&gt它将自动扩展到

私有静态最终记录器Logger=LoggerFactory.getLogger(ClassName.class);

并为您自动重新格式化和优化导入

发表评论