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对象的数量,那么大概您没有每个对象的一个​​变量标识符。我建议你简单地做类似的事情

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 派生的匿名类,因此:

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

ETC。?

于 2012-07-26T09:40:53.807 回答
0

一个List Object 可以包含多种类型的Objects。因此,在列表中,您可以保存一个人员对象以及一个这样的人员列表

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 回答