JAva反射の高度な応用
1591 ワード
public class DemoClass {
// String class
private List<String> hobby ;
// Comparable<?> class
private List<? extends Comparable<?>> compareableList;
public static void main(String[] args) throws NoSuchFieldException, SecurityException {
// getListParameterType();
// getWildcardTypeMethod1();
}
private static void getWildcardTypeMethod1() throws NoSuchFieldException {
Field field = DemoClass.class.getDeclaredField("compareableList");
ParameterizedType genericType = (ParameterizedType) field.getGenericType();
Type[] actualTypeArguments = genericType.getActualTypeArguments();
WildcardType wildcardType = (WildcardType) actualTypeArguments[0];
System.out.println(wildcardType.getUpperBounds()[0]);
}
private static void getListParameterType() throws NoSuchFieldException {
Field field = DemoClass.class.getDeclaredField("hobby");
ParameterizedType genericType = (ParameterizedType) field.getGenericType();
System.out.println(field.getGenericType());
Type[] actualTypeArguments = genericType.getActualTypeArguments();
System.out.println(actualTypeArguments[0]);
}
}
// T
public static class Bar extends Foo<T> {
public Class<?> getParameterClass() {
return (Class<?>) (((ParameterizedType)Bar.class.getGenericSuperclass()).getActualTypeArguments()[0]);
}
}