Skip to content

Commit 2fe1a4a

Browse files
committed
添加反射获取泛型信息
1 parent 3b7bc78 commit 2fe1a4a

4 files changed

Lines changed: 125 additions & 0 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package cn.byhieg.reflectiontutorial;
2+
3+
import java.util.List;
4+
5+
/**
6+
* Created by byhieg on 17/1/9.
7+
* Mail to byhieg@gmail.com
8+
*/
9+
public class GenericObject {
10+
public List<String> lists;
11+
12+
public List<String> getLists() {
13+
return lists;
14+
}
15+
16+
public void setLists(List<String> lists) {
17+
this.lists = lists;
18+
}
19+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package cn.byhieg.reflectiontutorial;
2+
3+
import java.lang.reflect.Array;
4+
import java.util.List;
5+
6+
/**
7+
* Created by byhieg on 17/1/9.
8+
* Mail to byhieg@gmail.com
9+
*/
10+
public class MyList<T> {
11+
12+
public List<T> lists;
13+
public List<String> stringLists ;
14+
15+
16+
public List<String> getStringLists() {
17+
return stringLists;
18+
}
19+
20+
public void setStringLists(List<String> stringLists) {
21+
this.stringLists = stringLists;
22+
}
23+
24+
public void add(T t){
25+
lists.add(t);
26+
}
27+
28+
public T get(int index){
29+
return lists.get(index);
30+
}
31+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package cn.byhieg.reflectiontutorialtest;
2+
3+
import cn.byhieg.reflectiontutorial.MyList;
4+
import junit.framework.TestCase;
5+
6+
/**
7+
* Created by byhieg on 17/1/9.
8+
* Mail to byhieg@gmail.com
9+
*/
10+
public class MyListTest extends TestCase {
11+
12+
public void testGeneric() throws Exception{
13+
Class clz = MyList.class;
14+
System.out.println(clz.getTypeParameters()[0]);
15+
}
16+
}

0 commit comments

Comments
 (0)