2014-01-06 86 views
0

我有一個方法返回一個列表。 (getListMethod)鑄造參考vs使用新(ArrayList)

是否有功能差異?

ArrayList myList = (ArrayList) getListMethod(); 


ArrayList myList = new ArrayList(getListMethod()); 
+3

當然有。一個是創建一個新對象,另一個是分配對現有對象的引用。如果對象不是'ArrayList'類型,這可能會失敗。 –

+0

另一個很大的區別是第二個不會編譯。 (除非碰巧有一個名爲'getListMethod'的變量......)你錯過了一個'()'。 – ajb

+0

ajb很好抓,固定。 – user2484014

回答

9

是的,是有區別的。

ArrayList myList = (ArrayList) getListMethod(); 

創建一個新的參照同ArrayList,而

ArrayList myList = new ArrayList(getListMethod()); 

複製舊列表到一個新的元素。

我在這裏假設您知道getListMethod()確實會返回ArrayList,否則您可能會遇到第一個變體的其他問題。

+0

是的,我知道,但我覺得這是一件壞事。我在猜測,如果getListMethod的內部實現發生更改並且用戶使用不同類型的List,那麼最好採取我不知道的行動? – user2484014

+0

@ user2484014:是的,確切地說。除非你真的需要'ArrrayList',否則一個好的方法是使用'List myList = getListMethod()'。 – Keppil

+0

非常感謝。只要Stackoverflow允許我將其標記爲答案。是的,我認爲這是必需的。我將這個列表作爲ParceableArrayList放入一個Bundle(Android)中。 – user2484014