2011-10-11 27 views
1
List<EventHandler<E>> listeners = new List<EventHandler<E>>(); 

爲什麼上面的行失敗:名單VS ArrayList的

無法實例類型List<EventHandler<E>>

但是這一個工程:

ArrayList<EventHandler<E>> listeners = new ArrayList<EventHandler<E>>(); 

回答

28

正確的方法是:

List<EventHandler<E>> listeners = new ArrayList<EventHandler<E>>(); 
  • 指一個目的是通過其接口(List
  • 實例化對象,其具體類型(ArrayList)(接口不能被實例化)
15

List是一個接口,你不能實例化一個接口。

6

列表是一個接口,你不能創建一個接口

的實例嘗試

List<EventHandler<E>> listeners = new ArrayList<EventHandler<E>>(); 
1

列表不能被實例化,因爲它只是一個接口。

但是,您可能還有其他問題。

你真的有一個叫'E'的課嗎?如果你這樣做,那麼你不應該沒有很好的理由。

單個字母(如E和T)幾乎專用於表示泛型類型參數。閱讀它:「這是關於如何製作類或方法的一般描述,沒有任何特定類型的引用 - 您可以通過任何合法的引用類型來參數化這個類」。

所以即使像ArrayList < T >這樣的類也不能實例化 - 因爲它們是類的通用「食譜」,而不是真正的具體類。

+0

http://download.oracle.com/javase/tutorial/java/generics/index.html – Caner

+0

你想在這裏做什麼? – kittylyst

+0

假設你的上下文無關鏈接應該引起注意,因爲它已經吃掉了ArrayList參數化的T括號。 – kittylyst