免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
關(guān)于Java如何讀取泛型類型參數(shù)
一般使用反射來獲取泛型類型信息
如下代碼:
Java代碼  
  1. package myGenetic;  
  2.   
  3. import java.lang.reflect.Field;  
  4. import java.lang.reflect.ParameterizedType;  
  5. import java.lang.reflect.Type;  
  6. import java.util.Map;  
  7.   
  8. public class GenericTest {  
  9.     /*使用反射來獲取泛型信息*/  
  10.     private Map<String, Integer> score;  
  11.     public static void main(String[] args) throws SecurityException, NoSuchFieldException {  
  12.         //Class clazz = GenericTest.class;  
  13.         Class<GenericTest> clazz = GenericTest.class;  
  14.         //System.out.println(clazz);  
  15.         Field f = clazz.getDeclaredField("score");  
  16.           
  17.         //直接使用getType只對普通類型有效,無法取到泛型參數(shù)  
  18.         Class<?> a = f.getType();  
  19.         System.out.println("score的類型是:"+a);  
  20.           
  21.         //獲得Field實例f的泛型類型  
  22.         Type gType = f.getGenericType();  
  23.         //如果gType類型是ParameterizedType的對象  
  24.         if (gType instanceof ParameterizedType) {  
  25.             ParameterizedType pType = (ParameterizedType) gType;  
  26.             //獲取原始類型  
  27.             Type rType = pType.getRawType();  
  28.             System.out.println("原始類型是:"+rType);  
  29.             //取得泛型類型參數(shù)  
  30.             Type[] tArgs = pType.getActualTypeArguments();  
  31.             System.out.println("泛型類型是:");  
  32.             for (int i = 0; i < tArgs.length; i++) {  
  33.                 System.out.println("第"+i+"個泛型類型是:"+tArgs[i]);  
  34.             }  
  35.         }else{  
  36.             System.out.println("獲取泛型類型出錯!");  
  37.         }  
  38.     }  
  39. }  


輸出結(jié)果如下:
score的類型是:interface java.util.Map
原始類型是:interface java.util.Map
泛型類型是:
第0個泛型類型是:class java.lang.String
第1個泛型類型是:class java.lang.Integer


還有一個較好的例子,多用于實現(xiàn)BaseDAO,代碼如下:
Java代碼  
  1. package myGenetic;  
  2.   
  3. import java.lang.reflect.ParameterizedType;  
  4.   
  5. class SubClass extends SuperClass<Person> {    
  6.         
  7.     public SubClass() {    
  8.         super();    
  9.     }    
  10.     
  11. }    
  12.     
  13. class Person {    
  14.     public Person() {    
  15.         super();    
  16.     }    
  17.     
  18.     public void function() {    
  19.         System.out.println("function in Person.class...");    
  20.     }    
  21. }    
  22.   
  23.   
  24. public abstract class SuperClass<T> {  
  25.      private Class<T> clazz;  
  26.        
  27.      @SuppressWarnings("unchecked")    
  28.         public SuperClass() {    
  29.             clazz = (Class<T>) ((ParameterizedType) super.getClass()    
  30.                     .getGenericSuperclass()).getActualTypeArguments()[0];  
  31.         }    
  32.         
  33.         public Class<T> getClazz() {    
  34.             return clazz;    
  35.         }    
  36.         
  37.         public void setClazz(Class<T> clazz) {    
  38.             this.clazz = clazz;    
  39.         }  
  40.           
  41.         /**  
  42.          * 普通的非泛型類Class  
  43.          * 泛型化的類Class<T>  
  44.          * JDK中,普通的Class.newInstance()方法的定義返回Object,要將該返回類型強制轉(zhuǎn)換為另一種類型;  
  45.          * 但是使用泛型的Class<T>,Class.newInstance()方法具有一個特定的返回類型;  
  46.          * @param args  
  47.          */    
  48.         public static void main(String[] args) {    
  49.             SuperClass<Person> subClass = new SubClass();    
  50.             //1.得到泛型類T實際的完整類名    
  51.             System.out.println(subClass.getClazz());    
  52.             //2.得到泛型類T的對象    
  53.             try {    
  54.                 System.out.println(subClass.getClazz().newInstance());    
  55.             } catch (InstantiationException e) {    
  56.                 e.printStackTrace();    
  57.             } catch (IllegalAccessException e) {    
  58.                 e.printStackTrace();    
  59.             }    
  60.             //3.調(diào)用泛型類T的方法    
  61.             try {    
  62.                 subClass.getClazz().newInstance().function();    
  63.             } catch (InstantiationException e) {    
  64.                 e.printStackTrace();    
  65.             } catch (IllegalAccessException e) {    
  66.                 e.printStackTrace();    
  67.             }    
  68.         }    
  69. }  


輸出結(jié)果如下:
class myGenetic.Person
myGenetic.Person@10d448
function in Person.class...
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JAVA反射總結(jié)
java 泛型 深入
java5如何得到泛型的類型參數(shù)
java里如何獲取泛型的類型
泛型40-43
Classworking 工具箱: 反射泛型
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服