因此,這裏是我的代碼:爲什麼我會在這個泛型類型上得到一個未經檢查的強制轉換警告?
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