tl; dr:如何使用类型参数转换对象而不会产生未选中的强制转换'警告?即:
List<Foo> bar = (List<Foo>) obj;
编译器正在给我一个未经检查的演员&#39;警告以下代码。如何修复警告?在演员阵容之前放置@SuppressWarnings("unchecked")
将代表最悲伤的解决方案。
public class Container<V> {
public V getV();
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Container<V> other = (Container<V>) obj;
return this.getV().equals(other.getV());
}
}
答案 0 :(得分:3)
您不需要将其投放到Container<V>
。无论如何,您都无法将其转换为Container<V>
而无需检查投射警告,因为它可能是任何内容的Container
。
但是当您从equals
V
推迟getV
时,equals
将会进行自己的类型检查(或应该)。
您只需将其投放到Container<?>
;让您调用的equals
方法确保other
的对象equal
为您自己的对象的V
。
Container<?> other = (Container<?>) obj;