我注意到,在Java Array.newInstance()
返回Object
,而不是T[]
。這是可以理解的,因爲這種方法是在Java支持泛型類型之前引入的。是否有任何通用版本的Array.newInstance?
然而,這是一個驚喜,沒有相應的通用版本。 Java 7的Arrays.copyOf
是不一樣的 - 它複製參數的內容,而不是創建一個新的虛擬數組(內部都是空對象)。
由於這樣的實現看起來微不足道,有沒有任何理由不將它添加到JRE中?或者我找不到一個?
UPDATE
看來我必須提供我自己的「瑣碎」的實施,以阻止問題的誤解。
class MyArrayUtil {
//Generic version for classes
@SuppressWarnings("unchecked")
public static <T> T[] newArrayOf(T[] t, int len){
return (T[]) Array.newInstance(t.getClass().getComponentType(), len);
}
//For array of int
public static int[] newArrayOf(int[] t, int len){
return new int[len];
}
//For other primitive types...
}
我不會發布此代碼作爲答案,因爲它不是問題的答案。問題是出於原因和/或現有代碼,而不是如何實施。
UPDATE
我已經更新了代碼,使其類似於Arrays.copyOf
,人和的優勢是程序員可以簡單地改變參數的類型來調整代碼爲另一種類型。此外,我還取消了原始類型的使用Array.newInstance
。
不,不可能以編譯時安全的方式實現它。例如,你不能創建一個新的實例:'List []'。編譯器永遠不會知道'T'的類型是什麼,所以它不能保證客戶端代碼是安全的。 –
Muel
由於'Arrays.copyOf'可以完成這項工作,所以沒有明顯的原因你不能。 –
'Arrays.copyOf'確定要複製的數組的具體類型。 – pstanton