关于如何获取泛型参数的实体类型
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
//当前对象的直接超类的 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
相关文章推荐
- 关于如何使用反射声明一个泛型类型变量(泛型参数是动态的)的问题
- Java 运行时如何获取泛型参数的类型
- Class的 getSuperclass与getGenericSuperclass区别和如何获取泛型参数类型
- 如何获取java中泛型参数的实际类型--反射获取
- Java 运行时如何获取泛型参数的类型
- 如何获取方法参数的泛型类型
- Java 运行时如何获取泛型参数的类型
- 关于获取泛型的实际类型的方法
- 跳过编译器,获取泛型参数的实际类型
- 一、获取子类DAO继承父类DAO的泛型参数类型的Class对象
- java反射获得泛型参数getGenericSuperclass():获取到父类泛型的类型
- 泛型技巧系列:如何提供类型参数之间的转换
- Gson通过借助TypeToken获取泛型参数的类型的方法(转)
- 获取java泛型参数类型
- 如何将反射得到的类型当作泛型中的参数类型进行传递
- java中获取泛型参数类型
- 如何获取继承类中的泛型T的类型
- java 获取参数泛型类型
- ParameterizedType获取java泛型参数类型
- Java反射获取实际泛型类型参数