我使用的是開源代碼,其中一個API返回List<String>
而List
是interface
。我知道他們是這樣設計的,以使API更通用,但我該如何使用它?我只想得到結果。如果我嘗試類似:如何在Java中獲取返回類型爲List接口的對象?
ArrayList<String> list = (ArrayList<String>) ...
我收到一個ArrayList cannot be cast to java.util.ArrayList
錯誤。
我使用的是開源代碼,其中一個API返回List<String>
而List
是interface
。我知道他們是這樣設計的,以使API更通用,但我該如何使用它?我只想得到結果。如果我嘗試類似:如何在Java中獲取返回類型爲List接口的對象?
ArrayList<String> list = (ArrayList<String>) ...
我收到一個ArrayList cannot be cast to java.util.ArrayList
錯誤。
爲什麼不使用界面?
List list = (..your method call..)
如果API返回的列表是不同的實現List
接口(即不ArrayList
)的,則無法將其轉換爲ArrayList
。您可以構建一個新的ArrayList
並使用從API獲得的List
進行初始化,但我沒有看到這一點。
您正在使用的API正在返回一些List
接口的實現。您無需關心他們目前正在使用哪個實施。這就是使用接口的一點 - 它們可以在明天更改實現,但由於API返回接口類型,所以使用該API的任何代碼都不必更改。
是不是列出了一個沒有實現就無法使用的接口? – pandagrammer 2014-12-07 07:44:41
@pandagrammer您正在使用的API正在返回List接口的一些實現。你不需要關心他們正在使用的實現。這就是使用接口的一點 - 它們可以在明天更改實現,但由於API返回接口類型,所以使用該API的任何代碼都不必更改。 – Eran 2014-12-07 07:47:20
如果你的API返回列表,那麼你可以做到以下幾點,讓列表的所有操作,如:
List list = myobject.mymethod();
然後不管列表實現像ArrayList
或LinkedList
等,你可以仍然添加/刪除/迭代/等。在列表中,因爲您已經從mymethod返回的內容引用了ArrayList。
您試圖執行哪些功能,無法在List類型的對象上完成? – 2014-12-07 07:43:45