8

Person クラスがあり、次のようにリストを作成しようとしているとします。

Person p1 = new Person("first", "id1");         
Person p2 = new Person("dummy", "id1"); 
Person p3 = new Person("second", "id2");         
Person p4 = new Person("third", "id1");         
List<Person> asList = Arrays.asList(p1, p2, p3, p4); 

今私の質問は、個々の Person オブジェクトを Arrays.asList() に渡す代わりに

次のような結合リストを渡すことはできますか

List<Person> asList = Arrays.asList(combinedPersonObjs); 

私は多くのことを試しましたが、キャストエラーが発生しています。

助けてください

注: Person オブジェクトの数は動的です。

4

5 に答える 5

9

確かに、あなたはすることができます

Person[] combinedPersonObjs = { p1, p2, p3, p4 };
List<Person> asList = Arrays.asList(combinePersonObjs);

オブジェクトの数がPerson事前にわからない場合は、オブジェクトごとに1つの変数識別子がない可能性があります。私はあなたが単に次のようなことをすることをお勧めします

List<Person> asList = new ArrayList<Person>();
for (int i = 0; i < numberOfPersons; i++)
    asList.add(new Person(ithName(i), "id" + i));
于 2012-07-26T09:38:39.377 に答える
2

すべてのオブジェクトを配列に入れ、この配列をArrays.asList()に渡します

ドキュメントはここにあります 。http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html

于 2012-07-26T09:38:46.413 に答える
1

配列を完全にバイパスして(なぜそれを使用しているのかよくわかりません)、リストから派生した匿名クラスを次のように作成できます。

List<Person> persons = new ArrayList<Person>(){{
   add(new Person("first", "id1"));
   add(new Person("second", "id2"));
   // etc..
}};

これは静的ブロック内で初期化を使用し、内部クラスを作成することに注意してください (予期しない場合、混乱を招く可能性があります)。内部ブロックはループして動的な数のオブジェクトを追加できることに注意してください(質問の編集で指摘したように)。

しかし、なぜそうしないのですか:

List<Person> persons = new ArrayList<Person>();
persons.add(new Person(...));

等。?

于 2012-07-26T09:40:53.807 に答える
0

List Object は、複数のタイプの Object を保持できます。したがって、リストでは、 Person オブジェクトと、このような人のリストを保持できます

List<Person> myList = new List<Person>();
Person p1 = new Person();
Person p2 = new Person();
myList.add(p1);
myList.add(p2);
Person p3 = new Person();
List<Object> globalList= new List<Object>();
globalList.add(myList );
globalList.add(p3);
于 2012-07-26T09:43:00.483 に答える
0

ローカル参照を作成しないでください。これを行うことができます:

List<Person> list = new ArrayList<Person>();
for( /* add here gardian */ ) {
    list.add(new Person("first", "id1"));
}
于 2012-07-26T09:43:04.767 に答える