ParameterizedType
private static class ParameterizedTypeTest<T extends Number> { private List<T> list = null; public static void main(String[] args) throws NoSuchFieldException { testTypeVariable(); } private Map.Entry<String, Integer> map = null; private static void getGetActualTypeArguments() throws NoSuchFieldException { Field fieldMap = ParameterizedTypeTest.class.getDeclaredField("map"); ParameterizedType typeMap = (ParameterizedType) fieldMap.getGenericType(); System.out.println(typeMap.getActualTypeArguments()[0]); System.out.println(typeMap.getActualTypeArguments()[1]); System.out.println(typeMap.getRawType()); System.out.println(typeMap.getOwnerType()); } private List<String>[] t; private static void testGenericArrayType() throws NoSuchFieldException { Field fieldArray = ParameterizedTypeTest.class.getDeclaredField("t"); GenericArrayType typeArray = (GenericArrayType) fieldArray.getGenericType(); System.out.println(typeArray.getClass().getName()); System.out.println(typeArray.getGenericComponentType()); } private List<T> t1; private T t2; private static void testTypeVariable() throws NoSuchFieldException { Field field = ParameterizedTypeTest.class.getDeclaredField("t1"); ParameterizedType type = (ParameterizedType) field.getGenericType(); System.out.println(type.getActualTypeArguments()[0].getClass().getName()); Field field2 = ParameterizedTypeTest.class.getDeclaredField("t2"); TypeVariable type2 = (TypeVariable) field2.getGenericType(); System.out.println(type2.getBounds()[0]); } }