1+ package cn .byhieg .reflectiontutorialtest ;
2+
3+ import cn .byhieg .reflectiontutorial .GenericObject ;
4+ import com .sun .org .apache .bcel .internal .generic .IF_ACMPEQ ;
5+ import junit .framework .TestCase ;
6+
7+ import java .lang .reflect .Field ;
8+ import java .lang .reflect .Method ;
9+ import java .lang .reflect .ParameterizedType ;
10+ import java .lang .reflect .Type ;
11+ import java .util .List ;
12+
13+ /**
14+ * Created by byhieg on 17/1/9.
15+ * Mail to byhieg@gmail.com
16+ */
17+ public class GenericObjectTest extends TestCase {
18+
19+ public void testGeneric ()throws Exception {
20+ Class clz = GenericObject .class ;
21+ Method getMethod = clz .getMethod ("getLists" );
22+ Type genericType = getMethod .getGenericReturnType ();
23+ if (genericType instanceof ParameterizedType ){
24+ ParameterizedType parameterizedType = ((ParameterizedType ) genericType );
25+ Type [] types = parameterizedType .getActualTypeArguments ();
26+ for (Type type : types ){
27+ Class actualClz = ((Class ) type );
28+ System .out .println ("参数化类型为 : " + actualClz );
29+ }
30+ }
31+
32+ Method setMethod = clz .getMethod ("setLists" , List .class );
33+ Type [] genericParameterTypes = setMethod .getGenericParameterTypes ();
34+ for (Type genericParameterType : genericParameterTypes ){
35+ System .out .println ("GenericParameterTypes为 : " + genericParameterType .getTypeName ());
36+ if (genericParameterType instanceof ParameterizedType ){
37+ ParameterizedType parameterizedType = ((ParameterizedType ) genericParameterType );
38+ System .out .println ("ParameterizedType为 :" + parameterizedType .getTypeName ());
39+ Type types [] = parameterizedType .getActualTypeArguments ();
40+ for (Type type : types ){
41+ System .out .println ("参数化类型为 : " + ((Class ) type ).getName ());
42+ }
43+ }
44+
45+ }
46+
47+ Field field = clz .getField ("lists" );
48+ Type type = field .getGenericType ();
49+ if (type instanceof ParameterizedType ){
50+ ParameterizedType parameterizedType = ((ParameterizedType ) type );
51+ Type [] types = parameterizedType .getActualTypeArguments ();
52+ for (Type type1 : types ) {
53+ System .out .println ("参数化类型 : " + ((Class ) type1 ).getTypeName ());
54+ }
55+ }
56+
57+ }
58+
59+ }
0 commit comments