gpt4 book ai didi

java - 为什么我会收到此泛型类型的未经检查的转换警告?

转载 作者:行者123 更新时间:2023-11-29 10:19:08 26 4
gpt4 key购买 nike

这是我的代码:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com