2

以下のコードがあります(クラスを逆シリアル化しています):

....
Type type = field.getGenericType();
if (type instanceof ParameterizedType) {
    ParameterizedType ptype = (ParameterizedType) type;
if(c.getSimpleName().equals("Vector")){
    Class pta = (Class) ptype.getActualTypeArguments()[0];
    Vector<what to put here> v = (Vector)field.get(obj);
    if(v == null){
        v = new Vector<what to put here>();
        field.set(obj, v);
    }
....

私の質問は、以前に取得したクラス名 (pta var) を知っているだけで、特定のタイプのデータを取得するようにベクターを変更するにはどうすればよいですか?

4

2 に答える 2

5

ジェネリックはコンパイル時に解決されるため、リストしたようにこれを行う方法はありません。Vector<Object>またはを使用するだけですVector

于 2012-10-26T21:03:14.960 に答える
2

Vectorの代わりに使用すると機能しVector<what to put here>ます。とにかく実行時に一般的な消去ロジックが使用され、ベクターは指定されたタイプを持たなくなります。

プリミティブ型に関連するコメントに関しては、プリミティブ型をに挿入することさえできないことに注意してくださいVectorjavadocから:「Vectorクラスはオブジェクトの拡張可能な配列を実装します」。プリミティブを追加する場合、オートボクシングを使用してそれらをオブジェクトカウンターパートに変換します。

于 2012-10-26T21:09:29.403 に答える