Java 绕过通用类型转换警告

Java 绕过通用类型转换警告,java,generics,Java,Generics,我试图绕过java在使用泛型时给出的未检查类型转换警告。我四处搜索,目前正在使用一种变通方法,但似乎速度很慢,效率很低。有什么好办法绕过警告吗 我的原始代码: Message<DataPoint> msg = (Message<DataPoint>) in.readObject(); km.points = msg.payload; 解决办法: Message<?> msg = null; Object obj = in.readObject(); if (

我试图绕过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);
                }
            }
        }
    }
}

警告只是警告,不应该阻止您编译。但是,如果不希望出现警告,可以使用以下注释对该方法进行注释:

@SuppressWarnings("unchecked")

如果in.readObject只返回Object,并且您不能更改API,但可以证明它始终包含消息实例,那么应该不会有任何问题。警告的存在让你感觉到这可能不是类型安全的,但是如果你能证明它是安全的,那么就不用太担心了。为什么不使用@SuppressWarningUnchecked呢?