2010-10-20 37 views
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 
+0

[Java泛型和數組初始化(http://stackoverflow.com/questions/470198/java-generics-and-array-initialization)的 – Thilo 2010-10-20 05:45:51

+0

可能重複的可能重複的[爪哇如何:通用陣列創建]( http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation) – Bozho 2010-10-20 05:48:04

回答

3

不幸的是Java不支持通用陣列的創建。我不知道確切的原因。實際上泛型只在編譯時才存在,當你運行javac時,即從.java移動到.class時,它將被刪除。但僅僅理解這個限制是不夠的。可能他們有這種功能的一些向後兼容性問題。

以下是您可以使用的解決方法。

  1. 使用集合(例如列表)而不是數組。

    List<Sameple> list = new ArrayList<Sameple>(); // this is OK and typesafe 
    
  2. 沒有泛型創建陣列,把代碼與@SuppressWarnings標註的特殊工廠方法:

    public class Test { 
        interface Sample<T>{} 
        @SuppressWarnings("unchecked") 
        public static <T> Sample<T>[] sampleArray() { 
         return new Sample[2]; 
        } 
    } 
    

現在你可以使用這個工廠方法無需任何額外的警告。

一般提示。

抑制警告是不好的做法。警告是潛在的問題。所以如果我必須抑制警告,我至少應該減少警告被抑制的範圍。 不幸的是,遺留的java API不支持泛型。我們經常在使用這些API時收到警告。我總是試圖將這些用途本地化爲特殊類別或至少像sampelArray()這樣的方法。這些方法標記爲@SuppressWarning,並且經常包含解釋警告在此處被抑制的註釋。