2

実行時にクラスのジェネリック インターフェイスを取得することは不可能であるとどこかで読みました。では、休止状態はどのようにこれを行うのですか? たとえば、OneToMany マッピングでは、hibernate はどのようにして Many パート クラスを見つけますか (注釈を使用)?

class A{
    ...
    @OneToMany(mapped-by="a")
    public List<B> getBs(){ 
    ...
    }
}
4

2 に答える 2

4

実行時にクラスのジェネリック インターフェイスを取得することは不可能であるとどこかで読みました。

場合によります。ジェネリック型のインスタンスにその型引数が何であるかを尋ねることはできませんが、クラス、メソッドの戻り値の型などに関するメタデータからその情報を取得できます.

たとえば、ではなくをMethod.getGenericReturnType返します。これにより、関連する情報を取得できます。TypeClass<?>

サンプルコード:

import java.lang.reflect.*;
import java.util.*;

public class Test {

    public static void main(String[] args) throws Exception {
        Method method = Test.class.getMethod("getList");
        Type returnType = method.getGenericReturnType();
        System.out.println(returnType); // java.util.List<java.lang.Integer>
        ParameterizedType parameterized = (ParameterizedType) returnType;
        System.out.println(parameterized.getActualTypeArguments()[0]);
    }    

    public List<Integer> getList() {
        return null;
    }
}
于 2012-08-15T21:48:27.787 に答える
0

クラスには、いくつかの一般的な情報を格納するメタデータが含まれています。

于 2012-08-15T21:49:01.527 に答える