0
class A<Type>{

    private Type id;

}

class B extends A<String>{


}

B b = new B();
Field idField = //reflection code to get id field

"idField" からどのように idField の正確なタイプを取得できますか? Type ではなく String を意味しますか?

4

1 に答える 1

1

あなたが何を達成しようとしているのか正確にはわかりません。しかし、フィールド'id'の具体的なタイプを決定したいと思います。

    public class A<T>{
    public T id;
    public Class<T> idType;

    public A(){
        idType = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }
}

public class B extends A<String>{

}

public static void main(String[] args) throws Exception {
    B b = new B();
    System.out.println(b.idType);
}

上記のコードスニペットの最後のsysoutステートメントは、「java.lang.String」を出力します。

これは、基本クラスで汎用機能を作成するときに非常に一般的に使用される手法です。

于 2012-11-02T18:20:58.403 に答える