因此,这里是我的代码:为什么我会在这个泛型类型上得到一个未经检查的强制转换警告?
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延伸可写,所以为什么我得到一个警告,当我尝试投的可写为T?而且由于我知道T扩展了Writable,是否可以安全地抑制这个警告?
良好的通话!并感谢您的快速响应。以前没有使用Class.cast,但我想我喜欢它! – sangfroid 2012-04-04 22:28:30
@PaulBellora我不使用hadoop,但[参考](http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/WritableFactories.html#newInstance(java。 lang.Class))我发现显示'可写入'。 – Jeffrey 2012-04-05 01:25:58
@Jeffrey - 我的错!我掠过太快,并假定OP使用Class#newInstance,完全缺少hadoop部分。 – 2012-04-05 01:28:33