我有一个看起来像这样的方法:
public Person(String name, Person mother, Person father, ArrayList<Person> children) {
this.name=name;
this.mother=mother;
this.father=father;
this.children=children;
}
然而,在尝试创建一个有孩子的新人时,我遇到了问题:
Person Toby = new Person("Toby", null, null, (Dick, Chester));
尽管迪克和切斯特的定义都进一步下降。更具体地说,它抱怨迪克和切斯特都无法解决变量问题。我是否必须创建一个临时的ArrayList并传递它?
谢谢。
答案 0 :(得分:4)
是的,您不会将Dick
和Chester
传递给构造函数。
你会假设你有两个名为Dick
和Chester
的Person对象:
ArrayList<Person> children = new ArrayList<Person>();
children.add(Dick);
children.add(Chester);
Person Toby = new Person("Toby", null, null, children);
你的构造函数期待一个ArrayList对象,所以你必须传递它。您使用的符号(Dick, Chester)
之类的符号在Java中没有意义。
答案 1 :(得分:3)
您可以使用varargs:
public Person(String name, Person mother, Person father, Person... children) {
...
this.children = Arrays.asList(children);
}
Person p = new Person("Foo", Mother, Father, Dick, Chester);
答案 2 :(得分:1)
我个人将Person构造函数更改为:
public Person(String name, Person mother, Person father, Person... children)
{
}
...基本上意味着构造函数将创建自己的Person对象数组,因此对它的调用将是,例如:
Person toby = new Person("Toby", null, null, childOne, childTwo, childThree);
或者:
Person toby = new Person("Toby", null, null);
答案 3 :(得分:0)
您的示例看起来不像Java代码。 首先,你必须在使用它们之前定义Dick和Chester。所以他们必须在托比之上“创造”。 其次,圆括号不会创建一个列表。您必须使用以下方法显式创建数组列表:
new ArrayList<Person>()
答案 4 :(得分:0)
如果你无法按照问题的评论试试这个:
public Person(String name, Person mother, Person father, List<Person> children) {
this.name=name;
this.mother=mother;
this.father=father;
this.children=children;
}
这里我更改了签名,将最后一个参数作为List类型。
Person Toby = new Person("Toby", null, null, Arrays.asList(Dick, Chester));
还必须更改儿童签名。 这里的要点是使用更抽象的类型。