2013-10-08 89 views
1
List<? extends Object> list = new ArrayList<? extends Object>(); 

有沒有人可以幫助我解釋爲什麼不能使用arraylist擴展泛型到對象?Arraylist泛型超類對象類

+1

你能解釋一下你的問題是另一種方式?我無法弄清楚你不能做什麼。 –

回答

7

爲什麼不能使用數組列表時,我超級類通用對象?

因爲你不能實例化通配符參數化類型。您只能使用具體的參數化類型。通配符參數化類型出現在new表達式中是非法的。

當然,您可以使用通配符參數化類型作爲參考類型。將它們視爲界面。您不能實例化接口本身,但可以將其用作參考類型。

所以,你的聲明更改爲:

List<? extends Object> list = new ArrayList<Object>(); 

但在這裏,你將無法添加任何東西到這個名單的唯一問題。事實上,我懷疑你真的需要這份名單聲明。如果你只是想要一個列表,你可以添加任何一個類的對象和它的任何子類,那麼你不需要通配符的上限。

對於例如,如果你想存儲EmployeeDoctor,並且Student,在同一個列表,其中所有的人都從Person延長,那麼你可以簡單地聲明爲列表:

List<Person> persons = new ArrayList<Person>(); 
persons.add(new Employee()); // This is OK 
persons.add(new Student()); // This too is OK 
+0

很好說。 –

+0

這意味着我可以這樣嗎? Person p = new Person(); 僱員延伸人 醫生延伸人 ... list.add ... .. 人員P = list.get(0); if(p instanceof Doctor){ //我可以得到醫生的對象? } – Spurdow

+0

順便說一句,謝謝你的明確解釋,我以爲我不能這樣做..這就是爲什麼我需要知道如何做到這一點的原因 – Spurdow