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 も変数に解決できないと不平を言っています。一時的な ArrayList を作成して渡す必要がありますか?

ありがとうございました。

4

5 に答える 5

4

はい、あなたは渡さずDickChesterそのようなコンストラクターに渡しません。

と という名前の 2 つの Person オブジェクトがあると仮定すると、次のようにDickなり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 を使用する前に定義する必要があります。したがって、Toby の「上」に作成する必要があります。次に、丸括弧はリストを作成しません。これを使用して、配列リストを明示的に作成する必要があります。

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

ここでは、署名を変更して、最後のパラメーターをリスト型として受け取ります。

Person Toby = new Person("Toby", null, null, Arrays.asList(Dick, Chester));

また、子署名も変更する必要があります。ここでのポイントは、より抽象的な型を使用することです。

于 2013-02-08T17:47:12.260 に答える