2014-02-19 87 views
0

我有以下代碼:泛型:類型的數組預期

public class DEF implements Set<ABC> { 

    private EnumSet<ABC> xyz=EnumSet.noneOf(ABC.class); 

    @Override 
    public <T> T[] toArray(T[] a) { 
     return xyz.toArray(a); 
    } 

} 

這給了我以下警告:

類型的數組 'ABC []' 預計將在43行

是這危險嗎?或者我可以忽略它?爲什麼這個警告?

+0

你爲什麼認爲'T'是'ABC'? – SLaks

+0

我編輯過。它現在有什麼意義嗎? – JohnyTex

回答

2

警告是完全正確的;你的代碼沒有意義。

通過編寫<T> T[] toArray(),您可以使用任何類型參數調用該函數,並返回該類型的數組。
總是返回一個數組ABC s違反了你聲稱它會做的事情。

總之,該功能不應該是通用的。


無的,這是適用於你的情況,因爲基本Set<E>接口需要這一點。

我不知道爲什麼Set<E>特此聲明的方式,但沒有什麼可以做的警告。

+0

但如果我覆蓋的方法,那麼我不能改變方法簽名,我可以嗎? – JohnyTex

+1

@ user2254314:你是對的;我不知道爲什麼基本版本是通用的。在這種情況下,你別無選擇,只能忽略警告。 – SLaks

+0

如果重新編輯你的答案,我會給予好評,並檢查它作爲一個答案。 – JohnyTex