2014-12-05 55 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")