2012-07-26 175 views
3

說我有一個Person類,我試圖創建一個列表爲;現在將自定義對象傳遞給Arrays.asList

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

我的問題是不是經過蹦牀網上單人反對Arrays.asList()

我可以通過一個組合列表,像

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

我已經嘗試了很多東西,但是我得到了鑄造錯誤。

請幫

注:人的對象的數量是動態的。

回答

5

當然,你可以做

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

其實我不確定有多少人可能有objs ...它是動態的....可以是p1,p2,p3,p4,... p10 – testndtv 2012-07-26 09:39:39

+0

+1其實,這是真正的用法該方法和'Arrays.asList(p1,p2,p3,p4)'只是語法糖,在內部它也創建一個數組。 – biziclop 2012-07-26 09:40:27

+2

@testndtv,但如果它是動態的,你沒有單獨的變量,'p1','p2','p3',...?如果您事先不知道人數,我建議您創建一個'ArrayList '並將它們添加到一個循環中。 – aioobe 2012-07-26 09:40:37

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

等?

1

A 列表對象可容納多種類型對象。因此,在一個列表你可以拿着一個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); 
+0

我覺得這真的很討厭。你可以把東西放在平凡的地方,但你如何輕易地將物體拉出來?誰知道列表中的內容? – 2012-07-26 09:47:10

1

一個列表只是不創建一個本地的參考,你可以這樣做:

List<Person> list = new ArrayList<Person>(); 
for(/* add here gardian */) { 
    list.add(new Person("first", "id1")); 
} 
相關問題