2013-05-13 20 views
1

當我想鑄ArrayList對象,從所述方法返回List參考:投清單ArrayList的

public static <T> List<T> asList(T... a) { 
    return new ArrayList<>(a); 
} 

從方法asList返回類型是一個List參照ArrayList對象,這意味着我可以將其轉換爲ArrayList參考。 使得:

String[] colors = { "black", "blue", "yellow" }; 
ArrayList<String> links = (ArrayList<String>) Arrays.asList(colors) ; 

但這個代碼所做的運行時錯誤:

在線程異常 「主要」 java.lang.ClassCastException: java.util.Arrays中的$ ArrayList中不能被強制轉換爲java.util.ArrayList

爲什麼會發生?

+0

ArrayList的是不是一個實際的數組列表,它只是一個包裝......這些犯規允許列表中的 – 2013-05-13 09:32:56

+0

你的意思是「包裝」一下任何修改? – Aladdin 2013-05-13 09:40:06

回答

4

你的假設,你可以把它轉換到ArrayList是無效的。

ArrayList是實現List接口的具體類型。不保證方法asList,將返回這種類型的實現。

實際上使用的類型是java.util.Arrays$ArrayList

使用具體類而不是接口。可以被認爲是不好的做法。這種方法是更好的,當你有特殊類型的類,你想給的,這種類型的專門用於任務未來開發商的提示。

但API應該以最抽象的方式公開。這就是使用List的原因。是從Arrays.asList返回