在静态 class 的内部 class 中使用非静态方法
Use a non-static method inside a inner class of a static class
与
相关
Cannot make a static reference to the non-static method
上下文
在 Processing 中,我在内部 Class 中使用方法 loadImage()。处理不同意:
Cannot make a static reference to a non-static method
loadImage(String) from the type PApplet
如果我使主要 class 成为非静态的,那么错误消息就会消失。我不明白为什么我的main class 不能是静态的,我不想实例化它,因为我不需要它。
内部class用于创建对象数组。
代码
class PApplet
{
public loadImage(foo)
{
// ...
}
}
static class MainStaticClass
{
class InnerClass
{
public nonStaticMethod(foo)
{
return PApplet.loadImage(foo); // Error
}
}
}
顶级 类 是静态的,所以它是多余的和令人困惑的,请参阅 Specification 内部 classes 默认是非静态的,您可以将它们声明为静态的。
对于非静态方法,您必须实例化一个 class 的对象,否则事情就会倒塌 - :-)
以后请努力post一个MCVE。您现在 post 编写的代码是无效语法,并不能真正反映您实际在做什么。
无论如何,loadImage()
函数不是静态的,所以你不能这样做:
PApplet.loadImage("img.jpg");
同样值得注意的是,每个草图都扩展了 PApplet
class,因此:
PImage img;
void setup(){
img = loadImage("img.jpg");
}
转换为 Java 代码,如下所示:
public class MySketch extends PApplet{
PImage img;
void setup(){
img = loadImage("img.jpg");
}
}
在这里,我们可以看到 loadImage()
函数来自我们正在扩展的 PApplet
class。
所以现在你有这样的东西:
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()
函数是静态的,它不属于任何特定实例。这就是它不起作用的原因。
如果我是你,我会退后一步问问自己为什么你需要内在的 classes。如果它是静态函数,那为什么不直接使用草图级别的函数呢?
与
相关Cannot make a static reference to the non-static method
上下文
在 Processing 中,我在内部 Class 中使用方法 loadImage()。处理不同意:
Cannot make a static reference to a non-static method loadImage(String) from the type PApplet
如果我使主要 class 成为非静态的,那么错误消息就会消失。我不明白为什么我的main class 不能是静态的,我不想实例化它,因为我不需要它。
内部class用于创建对象数组。
代码
class PApplet
{
public loadImage(foo)
{
// ...
}
}
static class MainStaticClass
{
class InnerClass
{
public nonStaticMethod(foo)
{
return PApplet.loadImage(foo); // Error
}
}
}
顶级 类 是静态的,所以它是多余的和令人困惑的,请参阅 Specification 内部 classes 默认是非静态的,您可以将它们声明为静态的。 对于非静态方法,您必须实例化一个 class 的对象,否则事情就会倒塌 - :-)
以后请努力post一个MCVE。您现在 post 编写的代码是无效语法,并不能真正反映您实际在做什么。
无论如何,loadImage()
函数不是静态的,所以你不能这样做:
PApplet.loadImage("img.jpg");
同样值得注意的是,每个草图都扩展了 PApplet
class,因此:
PImage img;
void setup(){
img = loadImage("img.jpg");
}
转换为 Java 代码,如下所示:
public class MySketch extends PApplet{
PImage img;
void setup(){
img = loadImage("img.jpg");
}
}
在这里,我们可以看到 loadImage()
函数来自我们正在扩展的 PApplet
class。
所以现在你有这样的东西:
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()
函数是静态的,它不属于任何特定实例。这就是它不起作用的原因。
如果我是你,我会退后一步问问自己为什么你需要内在的 classes。如果它是静态函数,那为什么不直接使用草图级别的函数呢?