作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码:
public class SetWritable<T extends Writable> implements Writable {
private Class<? extends Writable> valueClass;
private Set<T> values;
public SetWritable(Class<T> valueClass) {
this.valueClass = valueClass;
this.values = new HashSet<T>();
}
public void readFields(DataInput in) throws IOException {
values = new HashSet<T>();
int len = in.readInt();
for (int i = 0; i < len; i++) {
//this line is where I get the warning
//FYI, WritableFactories.newInstance returns an instance of Writable
T value = (T) WritableFactories.newInstance(valueClass);
value.readFields(in);
values.add(value);
}
}
}
让我感到困惑的是:我已经断言 T 扩展了 Writable,那么当我尝试将 Writable 转换为 T 时为什么会收到警告?既然我知道 T 扩展了 Writable,那么抑制这个警告是否安全?
最佳答案
您收到警告是因为 WritableFactories.newInstance
返回 Writable
和你的 T
扩展 Writable
,所以它可能不是一个安全的转换。但是,由于您使用的是 Class<T>
作为你对 newInstance
的论证禁止显示此警告是安全的。
存储valueClass
可能会更好作为Class<T>
并使用 Class#cast
给你投,那你就不丑了@SuppressWarnings
卡在你的方法上。
关于java - 为什么我会收到此泛型类型的未经检查的转换警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10019974/
我是一名优秀的程序员,十分优秀!