获取泛型类中的泛型参数的类型

来源:互联网 发布:ubuntu install g 编辑:程序博客网 时间:2024/04/30 16:12

泛型类只是定义了一个泛型,还没有传递一个类型给这个泛型,所以他是一个空的占位符而已。

如果要实实在在的得到这个泛型的类型,那就必须传递一个东西给他。

所以获取泛型类型,有两种方式,一种通过参数传递,一种通过子类继承的方式传递。


publci   class   Dao<T>   {        

        private Class<T>  clazz;        

          //第一种方式,无参数的方式,也就是通过子类继承的方式,把子类传递给父类 

          //  Dao<Student>   dao   =   new   StudentDao(); 

        public Dao(){

                    Type type = this.getClass().getGenericSuperclass();

                     if (type  instanceof  ParameterizedType) {

                             ParameterizedType  paramType  =  (ParameterizedType) type;

                             Type[] args = paramType.getActualTypeArguments();

                             if (args != null && args.length>0) {

                                       Type arg = args[0]

                                       if (arg instanceof Class) {

                                                 this.clazz= (Class<T>)arg;
                                                 // System.out.println(this.clazz);
                                       }
                             }

                     }

        }

       

       //第二种方式,通过参数传递

         // Dao<Student>    dao   =   new   Dao<>(Student.class);

       public  Dao(Class<T>   clazz) {

                 this.clazz  =  clazz;    

                 // System.out.println (this.clazz) ;     //输出 Student 

       }

}


--------------------------------------

public   class   StudentDao  extends  Dao<Student> {

        public  StudnetDao(){ }

}



0 0