【问题标题】:Use a non-static method inside a inner class of a static class在静态类的内部类中使用非静态方法
【发布时间】:2017-09-19 14:52:44
【问题描述】:

相关

Cannot make a static reference to the non-static method

上下文

在处理中,我在内部类中使用方法 loadImage()。处理不同意:

无法对非静态方法进行静态引用 来自 PApplet 类型的 loadImage(String)

如果我将主类设为非静态,那么错误消息就会消失。我不明白为什么我的主类不能是静态的,我不想实例化它,因为我不需要它。

内部类用于创建对象数组。

代码

class PApplet
{
    public loadImage(foo)
    {
        // ...
    }
}

static class MainStaticClass
{
    class InnerClass
    {
        public nonStaticMethod(foo)
        {
            return PApplet.loadImage(foo); // Error 
        }
    }
}

【问题讨论】:

标签: java oop static processing


【解决方案1】:

以后,请尝试发帖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() 函数是静态的,它不属于任何特定实例。这就是它不起作用的原因。

如果我是你,我会后退一步,问问自己为什么需要内部类。如果是静态函数,那为什么不直接使用草图级函数呢?

【讨论】:

  • 谢谢你,我必须承认我的问题写得真的很糟糕,并不总是很容易弄清楚必须添加什么。我只是通过使我的主类非静态并按照您的建议实例化它来解决我的问题。由于我对 OOP 的(不好的)理解,有时很难区分根本不需要实例的情况而不是只需要一个实例的情况。我忘了提到所有这个类都在我的处理项目的第二个选项卡中,它不代表草图。因此,所有内容都封装在一个主类中,以便于在新项目中导入。
  • @snoobdogg 新选项卡仍会转换为内部类,除非选项卡以 .java 结尾。
【解决方案2】:

顶级类是静态的,所以它的冗余和混乱请参阅Specification 内部类默认情况下是非静态的,您可以将它们声明为静态。 对于非静态方法,您必须实例化一个类的对象,否则事情会倒塌 - :-)

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    相关资源
    最近更新 更多