我有一个类,必须有一些静态方法。在这些静态方法中,我需要调用方法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
修复此编译时错误的适当方法是什么?
对于问题中的代码示例,标准的解决方案是通过类的名称显式引用类,甚至可以不调用getClassLoader():
class MyClass {
public static void startMusic() {
URL songPath = MyClass.class.getResource("background.midi");
}
}
这种方法仍然有一个缺点,如果您需要将此代码复制到许多类似的类中,它对于复制/粘贴错误不是很安全。
至于标题中的确切问题,在相邻的帖子中有一个技巧:
Class currentClass = new Object() { }.getClass().getEnclosingClass();
它使用一个嵌套的匿名Object子类来获取执行上下文。这个技巧的好处是复制/粘贴安全…
在其他类继承的基类中使用this时要注意:
同样值得注意的是,如果此代码段被塑造为某个基类的静态方法,那么currentClass值将始终是对该基类的引用,而不是可能使用该方法的任何子类的引用。