ジェネリックベクターのキャストメソッドを使用するにはどうすればよいですか?私が考えたのは、(Vector<T>).class.cast(getDates());
や(Vector<a_typeClass>).class.cast(getDates());
のようなパターンですが、動作しません。回避策は、すべての要素を循環させることです。しかしジェネリックベクターにキャストを使用する方法が必要です。Generics Vectorのcast()メソッドの使用方法<T>
(私はAPIを拡張していますので、はい、私は、ベクトルを使用する必要があります)
編集:これは、はるかに複雑なコードのほんの一部です。タイプチェックのためキャストは失敗しません:if (Date.class.isAssignableFrom(a_typeClass))
。私はまた、null
のサンプルをチェックアウトしなかった。 Eclipseはタイプチェックパターンを認識していないため、エラーType mismatch: cannot convert from Vector<Date> to Vector<T>
が発生しています。
を編集します。サンプルでは、他の方法でisAssignableFromを使用しました。前にあったDate.class.isAssignableFrom(a_typeClass)
は今やa_typeClass.equals(Date.class)
です。しかし、私は(Vector<T>)
キャストを使用しなければならない、私はそれを使用しない場合、コンパイルエラーType mismatch: cannot convert from Vector<Date> to Vector<T>
が発生します。 davmacとJB Nizetに感謝します。
サンプル:サンプルの周り
public class VectorCast {
@SuppressWarnings("unchecked")
public <T> Vector<T> getVector1(Class<T> a_typeClass) {
Vector<T> returnValues = new Vector<>();
if (a_typeClass.equals(Date.class)) {
returnValues = (Vector<T>) getDates();
// Not working
// return (Vector<T>).class.cast(getDates());
// return (Vector<a_typeClass>).class.cast(getDates());
}
return returnValues;
}
public Vector<Date> getDates() {
// Just dummy Values
return new Vector<Date>(Arrays.asList(new Date(0), new Date()));
}
public static void main(String[] args) {
VectorCast vectorCast = new VectorCast();
System.out.println(vectorCast.getVector1(Date.class));
}
}
が仕事:
public <T> Vector<T> getVector2(Class<T> a_typeClass) {
Vector<T> returnValues = new Vector<>();
if (a_typeClass.equals(Date.class)) {
for (Date date : getDates()) {
returnValues.add(a_typeClass.cast(date));
}
}
return returnValues;
}
ベクトルを持っていて、ベクトルに変換したいのですが、それは正しいですか? Foosの1つがBarでない場合はどうなりますか? –
彼らは常に正しいタイプです。私はユーザが望むベクターでチェックします。: '(Date.class.isAssignableFrom(a_typeClass))'と 'public Vector getDates()'はいつも 'Vector ' –
を返します。あなたがしていることはうまくいかないので、質問してください。私が求めているのは、あなたは何をしたいのですか? Foosの1つがBarでない場合、コードはどのようにすべきですか? –