我在一个类中声明了一个私有变量,我想在另一个类中访问。但问题是,当我传递对象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);
}
}
答案 0 :(得分:1)
你的班级非常错误。没有吸气剂,许多部件没有意义。以下列出了代码的错误:
没有setter,因此该字段始终为null
出于某种原因,实例化的字段
您没有从您实现的接口实现这些方法。我不会在这里修复,但你自己实现
FlappyBird类没有方法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()
返回值存储在b
和fb
中作为实例。您可以延伸此代码。
public class GraphicsRenderer extends JPanel {
public void paint(Graphics phics) {
FlappyBird fb = new FlappyBird(/*Args*/);
FlappyBird b = fb.getBird();
fb.setBird(/*Args*/);
}
}