在Java里面怎么样在静态方法中调用getClass()?| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看 活动链接

问题:在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

怎么样要修复这个编译时错误鸭

回答

答案是:
只需使用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:stackoverflow.com/questions/8…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享