防止 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 值作为实例存储在 b
和 fb
中。您可以扩展此代码。
public class GraphicsRenderer extends JPanel {
public void paint(Graphics phics) {
FlappyBird fb = new FlappyBird(/*Args*/);
FlappyBird b = fb.getBird();
fb.setBird(/*Args*/);
}
}
我在一个 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 值作为实例存储在 b
和 fb
中。您可以扩展此代码。
public class GraphicsRenderer extends JPanel {
public void paint(Graphics phics) {
FlappyBird fb = new FlappyBird(/*Args*/);
FlappyBird b = fb.getBird();
fb.setBird(/*Args*/);
}
}