永和堂大药房营业时间:java5如何得到泛型的类型参数

来源:百度文库 编辑:中财网 时间:2024/05/04 04:19:42
 http://signingoff.javaeye.com/blog/223782 

java5如何得到泛型的类型参数

直接上代码:
父类:
Java代码
  1. import java.lang.reflect.ParameterizedType;   
  2. /**  
  3.  * 要得到T.class,必须要有一个子类  
  4.  *   
  5.  *  
  6.  * @param   
  7.  * @param   
  8.  */  
  9. public class GenericTest {   
  10.     Class entityClass;   
  11.   
  12.     /**  
  13.      * 得到泛型参数的类型  
  14.      *   
  15.      */  
  16.     public GenericTest() {   
  17.            
  18.         ParameterizedType type = (ParameterizedType) this.getClass()   
  19.                 .getGenericSuperclass();   
  20.   
  21.         entityClass = (Class) type.getActualTypeArguments()[1];   
  22.         System.out.println("type=="+type);   
  23.         System.out.println("entityClass=="+entityClass);   
  24.         System.out.println("getOwnerType=="+type.getOwnerType());   
  25.         System.out.println("getRawType=="+type.getRawType());   
  26.     }   
  27.   
  28.     protected String getV() {   
  29.         return null;   
  30.     }   
  31. }  


子类:
Java代码
  1. /**  
  2.  * T.class是不存在的,所以的不到
     
  3.  * 但是在父类中可以得到的具体类型。  
  4.  */  
  5.   
  6. public class GenericTestChild extends GenericTest {   
  7.     Class clazz;   
  8.   
  9.     public GenericTestChild() {   
  10.   
  11.         // ---T.class是不存在的,所以下面的代码会有错误   
  12.         /**  
  13.          * ParameterizedType type = (ParameterizedType) this.getClass()  
  14.          * .getGenericSuperclass();  
  15.          *   
  16.          * clazz = (Class) type.getActualTypeArguments()[0];  
  17.          * System.out.println("type==" + type);  
  18.          * System.out.println("entityClass==" + entityClass);  
  19.          * System.out.println("getOwnerType==" + type.getOwnerType());  
  20.          * System.out.println("getRawType==" + type.getRawType());  
  21.          */  
  22.     }   
  23.   
  24.     public static void main(String args[]) {   
  25.   
  26.         GenericTestChild gt = new GenericTestChild();   
  27.   
  28.     }   
  29.   
  30. }