父类如何获取子类的范型

时间:2021-07-10 19:22:57

1,spring中一配置了<bean></bean>再启动项目的时候就会自动创建该类的实例。

2,java内存那块还得继续深入。

3,上代码:

  1. public class subParam extends param<myclass, myinvoke> {  //subParam 继承了param 。param里面俩范型
  2.     public static void main(String[] args) throws Exception{  
  3.         subParam  s = new subParam();  //子类一实例化,父类的构造函数里有乾坤
  4.     }  

 

  1. public class param<T1, T2> {  
  2.     class A {}  
  3.     class B extends A {}  
  4.       
  5.     private Class<T1> entityClass;  
  6.     protected param (){  
  7.         Type type = getClass().getGenericSuperclass();  //先得到当前类的Class,在得到当前类的父范型Class
  8.         System.out.println("getClass()==" + getClass());  
  9.         System.out.println("type = " + type);  
  10.         Type trueType = ((ParameterizedType)type).getActualTypeArguments()[0];  //强转为 可范型化的类型,得到父范型的真实的类的参数。
  11.         System.out.println("trueType1 = " + trueType);  
  12.         trueType = ((ParameterizedType)type).getActualTypeArguments()[1];  
  13.         System.out.println("trueType2 = " + trueType);  
  14.         this.entityClass = (Class<T1>)trueType;  
  15.           
  16.           
  17.         B t = new B();  
  18.         type = t.getClass().getGenericSuperclass();  
  19.       
  20.         System.out.println("B is A's super class :" + ((ParameterizedType)type).getActualTypeArguments().length);  //有时候强转会报异常。
  21.     }  
  22.       
  23. }  

public static <T> Class<T> getClassGenricType(final Class clazz) //第一个<T> 只是声明范型,没有别的意思。
{
return getClassGenricType(clazz, 0);
}