2016-02-07 27 views
0

我試圖下面的方法轉換:泛型類型陣列 - 不能從一個類型變量選擇

public List<AliasIp> getStoreAsList(String storeName) { 
    return new java.util.ArrayList<>(Arrays.asList(mGson.fromJson(getStoreRaw(storeName), AliasIp[].class))); 
} 

類似於一個通用版本:

public <T> List<T> getStoreAsList(String storeName) { 
    return new java.util.ArrayList<T>(Arrays.asList(mGson.fromJson(getStoreRaw(storeName), T[].class))); 
} 

但我運行到與煩惱T []類不與錯誤編譯:

「不能從一個類型變量選擇」

語法應該如何避免該錯誤?

+1

你面對的Java的 「類型擦除」。看看http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java,它不是100%等於你的問題,但在這個問題的答案你可以閱讀爲什麼編譯器無法理解T []。class是什麼。 – AGV

+1

當Java處理你的代碼時,它總是刪除具有確定類(類型擦除)的'T'表達式。 Java永遠不會離開'T'。所以,當遇到'T []'時,它不知道,這裏應該是什麼類。我建議你遵循@Kolesnikovich Dmitry的解決方案,並將類作爲方法參數傳遞。 –

+0

順便說一下'Arrays.asList'已經返回一個列表。除非方法保證返回不能從其當前簽名中識別的特定類型'ArrayList',否則不需要將其複製到'ArrayList'中。 – Holger

回答

3

可以包括Class<T[]> klass到方法的參數是這樣的:

public <T> List<T> getStoreAsList(String storeName, Class<T[]> klass) { 
    return new java.util.ArrayList<T>(Arrays.asList(mGson.fromJson(getStoreRaw(storeName), klass))); 
} 

就用這樣的:

List<MyStore1> myStores1 = getStoreAsList("myStoreName1", MyStore1[].class); 
List<MyStore2> myStores2 = getStoreAsList("myStoreName2", MyStore2[].class);