0

我正在努力在我的小型 android 项目中使用一对多关系。我已经提炼了这个问题(我正在学习java)。尝试将子对象添加到父对象时,我的程序崩溃。我花了一些时间来解决它。我需要很少的支持才能重回正轨。谢谢。

public class Master {
    public static void main(String[] args) {
        Parent big;
        big = new Parent("aParent");
        big.addChild(new Child("c1"));
        big.addChild(new Child("c2"));
        for (Child ch : big.getChildren()) {
            System.out.println(ch.toString());
        }
    }
}

public class Parent {
    public String name;
    public List<Child> children = new ArrayList<Child>();
    public Parent(String name) {
        // TODO Auto-generated constructor stub
        this.name = name;
        this.children = null;
    }
    public void addChild(Child c) {
        this.children.add(c);
    }
    public List<Child> getChildren() {
        return children;
    }
}

public class Child {
    public String name;
    public Child(String s) {
        this.name = s;
    }
    public String toString() {
        return name;
    }
}
4

4 回答 4

3

我敢打赌你的崩溃是NullPointerException.

发生这种情况是因为,在您的Parent班级中:

  • 您将其初始化children List为实例语句
  • 但是,您在构造函数中重新分配对的children List引用(在之后以null编程方式调用) - 请参阅您的代码:this.children = null; // to remove

因此,一旦addChild调用该方法,您就试图add将参数传递给一个null List

于 2013-09-30T18:48:29.363 回答
1

this.children = null;是你的问题,删除它,然后试一试

它会在您的 add 方法中导致 NullPointerException

于 2013-09-30T18:48:39.967 回答
1

删除这一行:this.children = null;

您正在清除您在此处创建的 ArrayList:

public List<Child> children = new ArrayList<Child>();
于 2013-09-30T18:49:45.030 回答
0

您正在使用字段初始化程序和构造函数初始化。注释掉这一行:this.children = null;

于 2013-09-30T18:56:35.923 回答