2014-03-25 55 views
1

我有一個類ArraySort用下面的代碼使用可比接口

private Comparable<Object> a[]; 
private int nElems; 

public ArraySort(int length) 
{ 
    this.a = new Comparable[length]; 
    this.nElems =0; 
} 

爲什麼Java的發出警告,在此聲明

this.a = new Comparable[length]; 

它發出如下警告的警告

Type safety: The expression of type Comparable[] needs unchecked conversion to conform to Comparable<Object>[] 

我知道它只是一個警告,但我很想知道原因

謝謝

+5

使用泛型類型的數組是個壞主意。 –

+2

你聲明一個'Comparable []',然後將它實例化爲一個'Comparable []'。這不明顯嗎? – 2rs2ts

+1

你有沒有想過讓這個泛型類?我認爲這樣會更順利。 –

回答

5

這是因爲Java不支持通用對象的數組。具體而言,這是你想要寫什麼,但下面的代碼將無法編譯

this.a = new Comparable<Object>[length]; // <<== Does not compile!!! 

這樣做的一個簡單的解決方法是切換到List<Comparable<Object>>:沒有效率的損失,編譯器會能夠爲您進行類型檢查:

private List<Comparable<Object>> a; 
... 
this.a = new ArrayList<Comparable<Object>>(length);