3
我們可以在java中創建通用接口數組嗎?通用接口數組
interface Sample<T>{}
在其他類
Sample<T> s[] = new Sample[2] ; // for this it shows warning
Sample<T> s[] = new Sample<T>[2];// for this it shows error
我們可以在java中創建通用接口數組嗎?通用接口數組
interface Sample<T>{}
在其他類
Sample<T> s[] = new Sample[2] ; // for this it shows warning
Sample<T> s[] = new Sample<T>[2];// for this it shows error
不幸的是Java不支持通用陣列的創建。我不知道確切的原因。實際上泛型只在編譯時才存在,當你運行javac時,即從.java移動到.class時,它將被刪除。但僅僅理解這個限制是不夠的。可能他們有這種功能的一些向後兼容性問題。
以下是您可以使用的解決方法。
使用集合(例如列表)而不是數組。
List<Sameple> list = new ArrayList<Sameple>(); // this is OK and typesafe
沒有泛型創建陣列,把代碼與@SuppressWarnings
標註的特殊工廠方法:
public class Test {
interface Sample<T>{}
@SuppressWarnings("unchecked")
public static <T> Sample<T>[] sampleArray() {
return new Sample[2];
}
}
現在你可以使用這個工廠方法無需任何額外的警告。
一般提示。
抑制警告是不好的做法。警告是潛在的問題。所以如果我必須抑制警告,我至少應該減少警告被抑制的範圍。 不幸的是,遺留的java API不支持泛型。我們經常在使用這些API時收到警告。我總是試圖將這些用途本地化爲特殊類別或至少像sampelArray()
這樣的方法。這些方法標記爲@SuppressWarning
,並且經常包含解釋警告在此處被抑制的註釋。
[Java泛型和數組初始化(http://stackoverflow.com/questions/470198/java-generics-and-array-initialization)的 – Thilo 2010-10-20 05:45:51
可能重複的可能重複的[爪哇如何:通用陣列創建]( http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation) – Bozho 2010-10-20 05:48:04