tl;dr:如何使用类型参数强制转换对象而不引发“未经检查的强制转换”警告?即:
List<Foo> bar = (List<Foo>) obj;
编译器向我发出有关以下代码的“未经检查的转换”警告。如何修复该警告?在强制转换之前放置 @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());
}
}
最佳答案
您不需要将其转换为 Container<V>
。您不能将其转换到 Container<V>
无论如何,没有未经检查的强制转换警告,因为它可能是 Container
任何东西。
但是当您遵循equals
时关于V
结果来自 getV
, equals
将进行自己的类型检查(或者应该进行)。
您只需将其转换为 Container<?>
;让equals
您调用的方法确保 other
的对象是equal
到你自己的对象的V
.
Container<?> other = (Container<?>) obj;
关于java - 在 Java 中为具有类型参数的类编写平等契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28975234/