/**
* ParameterizedType
* 1:getActualTypeArguments 得到帶<> 參數的類型 比如java.lang.String
* 2:java.util.List 得到帶參數全限定名稱
* 3:如果屬於自己的對象中對象且帶有<>,返回自己的全限定名稱
*/
public class ParameterizedBean {
List<String> list1;
List list2;
Map<String, Long> map1;
Map map2;
Map.Entry<Long, Short> map3;
/**
* Type[] getActualTypeArguments()
*/
public static void main(String[] args) {
System.out.println("A===================================A");
methodA();
System.out.println("B===================================B");
methodB();
System.out.println("C===================================C");
methodC();
}
private static void methodC() {
Field[] fields = ParameterizedBean.class.getDeclaredFields();
for(Field f:fields){
if(f.getGenericType() instanceof ParameterizedType){
ParameterizedType pType = (ParameterizedType) f.getGenericType();
System.out.println("變量:"+f.getName());
Type t = pType.getOwnerType();
if(t == null){
System.out.println("OwnerType:Null ");
}else{ System.out.println("OwnerType:"+t.getTypeName());
}
}
}
}
private static void methodB() {
Field[] fields = ParameterizedBean.class.getDeclaredFields();
for(Field f:fields){
if(f.getGenericType() instanceof ParameterizedType){
ParameterizedType pType = (ParameterizedType) f.getGenericType();
System.out.println("變量:"+f.getName());
System.out.println("RawType:"+pType.getRawType().getTypeName());
}
}
}
private static void methodA() {
Field[] fields = ParameterizedBean.class.getDeclaredFields();
for (Field f : fields) {
if (f.getGenericType() instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType) f.getGenericType();
System.out.println("變量:" + pType.getTypeName() + " ");
Type[] types = pType.getActualTypeArguments();
for (Type t : types) {
System.out.println("類型:" + t.getTypeName());
}
}
}
}
}
運行結果
A===================================A
變量:java.util.List<java.lang.String>
類型:java.lang.String
變量:java.util.Map<java.lang.String, java.lang.Long>
類型:java.lang.String
類型:java.lang.Long
變量:java.util.Map.java.util.Map$Entry<java.lang.Long, java.lang.Short>
類型:java.lang.Long
類型:java.lang.Short
B===================================B
變量:list1
RawType:java.util.List
變量:map1
RawType:java.util.Map
變量:map3
RawType:java.util.Map$Entry
C===================================C
變量:list1
OwnerType:Null
變量:map1
OwnerType:Null
變量:map3
OwnerType:java.util.Map