2014-12-05 89 views
0

我試圖解決Java使用泛型時給出的未經檢查的類型轉換警告。我周圍搜索,我目前正在使用一種解決方法,但它似乎很慢,效率低下。有什麼好方法來解決警告?繞過通用類型轉換警告

我的原代碼:

Message<DataPoint> msg = (Message<DataPoint>) in.readObject(); 
km.points = msg.payload; 

解決方法:

Message<?> msg = null; 
Object obj = in.readObject(); 
if (obj instanceof Message) { 
    msg = (Message<?>) obj; 
    if (msg.payload instanceof ArrayList<?>) { 
     if (msg.payload.size() > 0) { 
      for (int i = 0; i < msg.payload.size(); i++) { 
       Object o = msg.payload.get(i); 
       if (o instanceof DataPoint) { 
        km.points.add((DataPoint)o); 
       } 
      } 
     } 
    } 
} 
+0

如果'in.readObject'只返回'Object',你不能改變的API,但你可以**證明* *它總是包含一個'Message'的實例,那麼就不會有任何問題。警告在那裏,所以你會明白這個*可能不是安全的,但如果你能證明它是,那麼不要太擔心它。 – Makoto 2014-12-05 04:45:19

+0

爲什麼不使用@SuppressWarnings(「unchecked」)? – 2014-12-05 04:46:43

回答

0

警告是正義的,警告,不應該從編譯阻止你。如果你不希望警告出現,但是你可以註釋與方法:

@SuppressWarnings("unchecked")