Cannot make a static reference to the non-static method
在Processing中,我在Inner Class中使用方法loadImage()。处理不同意:
无法对非静态方法进行静态引用 来自PApplet类型的loadImage(String)
如果我使主类非静态,那么错误消息就会消失。我不明白为什么我的主类不能是静态的,我不想实例化它,因为我不需要它。
内部类用于创建对象数组。
class PApplet
{
public loadImage(foo)
{
// ...
}
}
static class MainStaticClass
{
class InnerClass
{
public nonStaticMethod(foo)
{
return PApplet.loadImage(foo); // Error
}
}
}
答案 0 :(得分:0)
将来,请尝试发布MCVE。您现在发布的代码不是有效的语法,并不能真正反映您实际所做的事情。
无论如何,loadImage()
功能不是静态的,所以你不能这样做:
PApplet.loadImage("img.jpg");
并且值得注意的是,每个草图都扩展了PApplet
类,所以这个:
PImage img;
void setup(){
img = loadImage("img.jpg");
}
转换为如下所示的Java代码:
public class MySketch extends PApplet{
PImage img;
void setup(){
img = loadImage("img.jpg");
}
}
在这里,我们可以看到loadImage()
函数来自PApplet
类,我们正在扩展它。
所以现在你有这样的事情:
public class MySketch extends PApplet{
PImage img;
void setup(){
img = MyInnerClass.getImage("img.jpg");
}
class MyInnerClass{
public static PImage getImage(String loc){
return loadImage(loc);
}
}
}
或类似的东西:
public class MySketch extends PApplet{
PImage img;
void setup(){
img = new MyInnerClass().getImage("img.jpg");
}
static class MyInnerClass{
public PImage getImage(String loc){
return loadImage(loc);
}
}
}
在任何一种情况下,都会产生错误,表示您无法在静态上下文中使用非静态loadImage()
函数。
那是因为loadImage()
函数来自实例本身。 您需要一个实例来使用非静态函数。但由于getImage()
函数是静态的,因此它不属于任何特定实例。这就是为什么它不起作用的原因。
如果我是你,我会退后一步,问问自己为什么你需要内部课程。如果它是静态函数,那么为什么不使用草图级函数?
答案 1 :(得分:-1)
顶级类是静态的,所以它的冗余和混乱看到Specification内部类默认是非静态的,你可以将它们声明为静态。 对于非静态方法,您必须实例化类的对象,否则事情就会崩溃 - : - )