[英]Generic Parameter instantiation discovery with Java Reflection
請考慮以下情形:
class A<T> {}
class B extends A<Integer> {}
通過Java中的反射,如何得知B
中的T
類型變量被實例化為Integer
?
您可以使用
Type type = B.class.getGenericSuperclass();
// TODO: check with instanceof first?
ParameterizedType parameterized = (ParameterizedType) type;
// TODO: Check that there *are* type arguments
Type firstTypeArgument = parameterized.getActualTypeArguments()[0];
簡短但完整的示例:
import java.lang.reflect.*;
class A<T> {}
class B extends A<Integer> {}
public class Test {
public static void main(String[] args) {
Type type = B.class.getGenericSuperclass();
ParameterizedType parameterized = (ParameterizedType) type;
// Prints class java.lang.Integer
System.out.println(parameterized.getActualTypeArguments()[0]);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.