hier ist also mein Code:Warum bekomme ich eine ungeprüfte Cast-Warnung für diesen generischen Typ?
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);
}
}
}
Was mir verwirrend ist dies: Ich habe behauptet, dass T Beschreibbare erstreckt, also warum bekomme ich eine Warnung, wenn ich versuche, die beschreibbar zu werfen auf T? Und da ich weiß, dass T schreibbar ist, ist es sicher, diese Warnung zu unterdrücken?
Guter Anruf! Und danke für die schnelle Antwort. Ich habe Class.cast noch nicht benutzt, aber ich denke, ich mag es! – sangfroid
@PaulBellora Ich benutze nicht hadoop, aber die [Referenz] (http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/WritableFactories.html#newInstance (Java. lang.Class)) Ich fand gefunden 'Writable'. – Jeffrey
@ Jeffrey - Mein Fehler! Ich übersprang zu schnell und nahm an, dass das OP die Klasse # newInstance benutzte und den Hadoop-Teil komplett vermisste. –