防止 NPE:从另一个 class 访问私有对象

Prevent NPE: accessing private object from another class

我在一个 class 中声明了一个我想在另一个中访问的私有变量。但问题是当我传递对象 flappyBird 时,它是空的。我需要做出什么改变,才不会出现这种情况?

FlappyBird.java : 对象在这里创建

public class FlappyBird implements ActionListener, KeyListener, MouseListener
{

    private static FlappyBird flappyBird;

    public static void main(String[] args)
        /* CREATE INSTANCE OF FLAPPBIRD() */
    {
        flappyBird = new FlappyBird();
    }

    public static FlappyBird getBird() {
        return flappyBird;
    }

    public static void paint(Graphics phics) {
        ...
    }

GraphicRenderer.java : 在此处访问对象

    public class GraphicsRenderer extends JPanel
    {
        private static FlappyBird bird = new FlappyBird();

    public void paint(Graphics phics)
    {
        // Generate game graphics by calling paint() in FlappyBird.
        bird.getBird();
        super.paint(phics); 
        bird.paint(phics);
    }
}

你的 class 大错特错。没有 getter 并且很多部分没有意义。以下是代码错误列表:

  • 否 setter 因此该字段将始终为空

  • 由于某种原因,实例化一个字段

  • 您没有从您实现的接口中实现方法。我不会在这里解决这个问题,但是你自己实现它

  • FlappyBird class 没有方法 paint()。我也不会解决这个问题,因为你可以自己做,而且你没有提供任何关于方法的细节

这里有一些修复:

public class FlappyBird implements ActionListener, KeyListener, MouseListener {

    private static FlappyBird flappyBird;

    public FlappyBird(/* Some attributes to the bird */) {
        /* Field = attribute */
    }

    public static void main(String[] args) {
        flappyBird = new FlappyBird(/* Constructor Args */);
    }

    public FlappyBird getBird() {
        return flappyBird;
    }

    public void setBird(/* You decide the arguments */) {
        /* Field = argument */
    }
}

我添加了一个构造函数,修复了上面的代码,添加了一个setter。构造函数是这样调用的:

FlappyBird fb = new FlappyBird(arguments);

现在调用的时候需要实例化调用构造函数。然后,您可以访问这些方法。我将 getBird() return 值作为实例存储在 bfb 中。您可以扩展此代码。

public class GraphicsRenderer extends JPanel {

    public void paint(Graphics phics) {
        FlappyBird fb = new FlappyBird(/*Args*/);
        FlappyBird b = fb.getBird();
        fb.setBird(/*Args*/);
    }
}