1

我有一个看起来像这样的方法:

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));

尽管 Dick 和 Chester 的定义都更进一步。更具体地说,它抱怨 Dick 和 Chester 都不能解析为变量。我是否必须制作一个临时的 ArrayList 并通过它?

谢谢你。

4

5 回答 5

4

Dick是的,你不会Chester像那样传递给构造函数。

你会,假设你确实有两个名为Dickand的 Person 对象Chester

ArrayList<Person> children = new ArrayList<Person>();
children.add(Dick);
children.add(Chester);

Person Toby = new Person("Toby", null, null, children);

您的构造函数需要一个 ArrayList 对象,因此您必须传递它。像您使用的符号 ,(Dick, Chester)在 Java 中没有意义。

于 2013-02-08T17:27:31.180 回答
3

您可以使用可变参数:

public Person(String name, Person mother, Person father, Person... children) {
 ...
 this.children = Arrays.asList(children);
} 

Person p = new Person("Foo", Mother, Father, Dick, Chester);
于 2013-02-08T17:28:36.077 回答
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);
于 2013-02-08T17:28:00.783 回答
0

您的示例看起来不像 Java 代码。首先,您必须在使用之前定义 Dick 和 Chester。所以他们必须在托比的“上方”被创造出来。其次,圆括号不会为您创建列表。您必须使用以下命令显式创建一个数组列表:

new ArrayList<Person>()
于 2013-02-08T17:28:50.660 回答
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));

孩子的签名也必须改变。这里的重点是使用更抽象的类型。

于 2013-02-08T17:47:12.260 回答