我使用的返回類型List<>
的方法,而我則可以調用該方法List
:爲什麼不需要聲明List實現?
要清楚artistsPager.artists.items
將返回類型List<Artist>
。
由於List
只是一個接口,如何編譯器讓我使用這個artists
對象,沒有一個List<>
總是需要一個實現,如ArrayList
?
例如,編譯器不會讓我做到以下幾點,因爲「List是抽象的,不能被實例化」:
List<Integer> list = new List<Integer>();
如何爲artistsPager.artists.items
比new List<Integer>()
有什麼不同?
對於那些好奇,這來自Java Web API wrapper for Android。所有的幫助非常感謝。
我不認爲這是這個question的重複,因爲即使答案是相同的,但它們產生的問題是不同的。另一個問題是詢問類型List
和ArrayList
之間的差異,而我的問題想知道爲什麼編譯器沒有抱怨List
的實現被隱藏。
我很好,有這標記爲重複,以指導未來的用戶到那個問題,但我不認爲它應該被關閉作爲答案,我認爲這將是非常有用的其他用戶。
您應該查看interfaces/abstract類並查看它們在Java中的使用方式。這是一組重要的知識,特別是在處理像Android和JDK這樣的高級類庫時,因爲它們幾乎在任何地方都使用了接口。 –
感謝@DaveLugg,我很困惑,因爲我查看了Spotify API的源代碼,並且找不到其他類型列表的任何實例。下次我會相信編譯器!有沒有什麼快速的方法來確定List <>實際實現的位置,而不是遍歷代碼? – Richard
使用接口的一點是,你不應該關心它的實現,只是它是一個'List'。 ArrayList類型是它的一個實現,可能是最常見的。所以你可以使用'List list = new ArrayList ();'。 您可以在oracle docs(https://docs.oracle.com/javase/6/docs/api/java/util/List.html)中找到List接口的默認實現,並參閱「所有已知的實現類」 –