2015-03-03 69 views
4

在類型化參數化類型對象時是否可以避免unchecked警告?例如,下面是我面對的實際情況,var1JComboBox<RandomType>的類型我希望將它存儲在Map中,然後檢索它,迫使我陷入以下情況。避免參數化類型鑄造中的未檢查鑄造警告

JComboBox<RandomType> var1 = new JComboBox<RandomType>(); 

    Object varRaw = var1; 

    JComboBox<RandomType> var2 = (JComboBox<RandomType>) varRaw; 

    JComboBox<RandomType> var3; 
    if (JComboBox.class.isAssignableFrom(varRaw.getClass())) { 
     var3 = JComboBox.class.cast(varRaw); 
    } 

正常轉換和條件轉換都會導致相同的警告。

在這種情況下甚至可以避免這種警告,而無需使用@SuppressWarnings註釋?

+0

你總是可以簡單地將suppresswarnings(unchecked)註釋放到方法上,儘管我真的希望看到一個「正確的」答案。 – 2015-03-03 02:51:27

+0

它的確如此,我瀏覽過很多頁面,指南和文檔,但找不到一個清理投影對象的答案。 – Lordbalmon 2015-03-03 03:16:44

+0

我不得不說,這是一個我有很大興趣的問題。 – 2015-03-04 05:28:48

回答

0

我的答案是否定的,沒有更好的選擇(我知道)。但我不是一個權威的來源,似乎很難證明每個其他選擇都不會產生'虛假'的警告。

我已經到了一個假設有一些警告周圍的小惡(點是有@SupressWarnings unchecked,但我想知道是否值得注意的出現)。出於同樣的原因,我會皺眉javac -Xlint:unchecked非標準選項

其他來源也表示,不可能在所有情況下禁止未經檢查的警告(特別是在處理不完全適應泛型的圖書館時)。例如在這Generics tutorial作者說

是否可以消除所有「未經檢查」的警告? - 差不多

然後,她進入了一些笨拙的技術解釋,壓倒我。因此,我不知道她說的是否算作什麼的證據。

我只知道我不能證明獨角獸不存在。但如果我沒有注意到任何人實際註冊他們的存在,我認爲他們不存在這是公平的。那是Falsafiability,只是拿這個邪惡的技術問題而不是愚蠢的獨角獸。