実行時にクラスのジェネリック インターフェイスを取得することは不可能であるとどこかで読みました。では、休止状態はどのようにこれを行うのですか? たとえば、OneToMany マッピングでは、hibernate はどのようにして Many パート クラスを見つけますか (注釈を使用)?
class A{
...
@OneToMany(mapped-by="a")
public List<B> getBs(){
...
}
}
実行時にクラスのジェネリック インターフェイスを取得することは不可能であるとどこかで読みました。では、休止状態はどのようにこれを行うのですか? たとえば、OneToMany マッピングでは、hibernate はどのようにして Many パート クラスを見つけますか (注釈を使用)?
class A{
...
@OneToMany(mapped-by="a")
public List<B> getBs(){
...
}
}
実行時にクラスのジェネリック インターフェイスを取得することは不可能であるとどこかで読みました。
場合によります。ジェネリック型のインスタンスにその型引数が何であるかを尋ねることはできませんが、クラス、メソッドの戻り値の型などに関するメタデータからその情報を取得できます.
たとえば、ではなくをMethod.getGenericReturnType
返します。これにより、関連する情報を取得できます。Type
Class<?>
サンプルコード:
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;
}
}
クラスには、いくつかの一般的な情報を格納するメタデータが含まれています。