获取泛型参数的类型
出现:
使用以下工具类方法获取~
Class
<
T
>
entityClass
=
(Class
<
T
>
)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[
0
];
出现:
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
使用以下工具类方法获取~
1
package
cn.pconline.prolib.util;
2 import java.lang.reflect.ParameterizedType;
3 import java.lang.reflect.Type;
4
5 public class GenericsUtils {
6 /**
7 * 通过反射,获得定义Class时声明的父类的范型参数的类型.
8 * 如public BookManager extends GenricManager<Book>
9 *
10 * @param clazz The class to introspect
11 * @return the first generic declaration, or <code>Object.class</code> if cannot be determined
12 */
13 public static Class getSuperClassGenricType(Class clazz) {
14 return getSuperClassGenricType(clazz, 0 );
15 }
16
17 /**
18 * 通过反射,获得定义Class时声明的父类的范型参数的类型.
19 * 如public BookManager extends GenricManager<Book>
20 *
21 * @param clazz clazz The class to introspect
22 * @param index the Index of the generic ddeclaration,start from 0.
23 */
24 public static Class getSuperClassGenricType(Class clazz, int index) throws IndexOutOfBoundsException {
25
26 Type genType = clazz.getGenericSuperclass();
27
28 if ( ! (genType instanceof ParameterizedType)) {
29 return Object. class ;
30 }
31
32 Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
33
34 if (index >= params.length || index < 0 ) {
35 return Object. class ;
36 }
37 if ( ! (params[index] instanceof Class)) {
38 return Object. class ;
39 }
40 return (Class) params[index];
41 }
42 }
2 import java.lang.reflect.ParameterizedType;
3 import java.lang.reflect.Type;
4
5 public class GenericsUtils {
6 /**
7 * 通过反射,获得定义Class时声明的父类的范型参数的类型.
8 * 如public BookManager extends GenricManager<Book>
9 *
10 * @param clazz The class to introspect
11 * @return the first generic declaration, or <code>Object.class</code> if cannot be determined
12 */
13 public static Class getSuperClassGenricType(Class clazz) {
14 return getSuperClassGenricType(clazz, 0 );
15 }
16
17 /**
18 * 通过反射,获得定义Class时声明的父类的范型参数的类型.
19 * 如public BookManager extends GenricManager<Book>
20 *
21 * @param clazz clazz The class to introspect
22 * @param index the Index of the generic ddeclaration,start from 0.
23 */
24 public static Class getSuperClassGenricType(Class clazz, int index) throws IndexOutOfBoundsException {
25
26 Type genType = clazz.getGenericSuperclass();
27
28 if ( ! (genType instanceof ParameterizedType)) {
29 return Object. class ;
30 }
31
32 Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
33
34 if (index >= params.length || index < 0 ) {
35 return Object. class ;
36 }
37 if ( ! (params[index] instanceof Class)) {
38 return Object. class ;
39 }
40 return (Class) params[index];
41 }
42 }
Class
<
T
>
entityClass
=
GenericsUtils.getSuperClassGenricType(BasicService.
class
,
0
);