您的位置:首页 > 其它

关于如何获取泛型参数的实体类型

2017-09-27 21:48 573 查看
         通常我们获取泛型参数的类型的方法就下面几句代码:

   

         //当前对象的直接超类的 Type

        Type type = getClass().getGenericSuperclass();

        //参数化类型  

        ParameterizedType parameterizedType = (ParameterizedType) type;

        //返回表示此类型实际类型参数的 Type 对象的数组(可能有几个泛型参数)

        Type[] types= parameterizedType.getActualTypeArguments();

        //to-do根据需要获取所需泛型类型

        

       但是由于java编译时的类型擦除,会导致获取的泛型类型永远为Object,所以如果要获取泛型的类型,必须在编译時        就确定其泛型的类型,方法有一下几个:

      1.继承泛型类,并明确指出其泛型类型

       public class ChildJsonParseBean extends JsonParseBean<User> {}

        实例化后为:

       ChildJsonParseBean  bean=new  ChildJsonParseBean()

       2.泛型类为抽象类

       public   abstract class JsonParseBean<T> {}

       实例化后为:

       JsonParseBean<User>  bean=new  JsonParseBean<User> (){}

       3.泛型类为普通类

        public  class JsonParseBean<T> {}

        实例化后为:

       JsonParseBean<User>  bean=new  JsonParseBean<User> (){}

        注意:第三种方式后面的{}不能省掉,不然也无法获取类型

       总结:三种方式的原理其实都是一样的0.0

  

       

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: