将arraylist作为方法的参数传递

时间:2013-02-08 17:25:15

标签: java arraylist arguments

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

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并传递它?

谢谢。

5 个答案:

答案 0 :(得分:4)

是的,您不会将DickChester传递给构造函数。

你会假设你有两个名为DickChester的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));

还必须更改儿童签名。 这里的要点是使用更抽象的类型。