阿川CH
学海无涯,上栽上栽!
Toggle navigation
阿川CH
主页
归档
标签
关于获取泛型参数的一些实践
java
2018-03-09 17:20:40
0
0
0
cqc
java
用于测试的类 ```java public class GenericTest<T> { public static void main(String[] args) { getParameterizedType(new GenericTest<String>()); getParameterizedType(new GenericTest<String>(){}); } public static void getParameterizedType(Object o){ System.out.printf("正在测试的类:%s \n", o.getClass()); Type type = o.getClass().getGenericSuperclass(); System.out.printf("获得的父类是:%s \n", type); if (type instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType) type; Type[] argTypes = parameterizedType.getActualTypeArguments(); for (Type argType : argTypes) { System.out.printf("泛型参数有:%s \n", argType); } }else { System.out.printf("类%s不是一个泛型类 \n", type); } System.out.println("========================"); } } ``` 输出结果 ``` 正在测试的类:class me.cqc.GenericTest 获得的父类是:class java.lang.Object 类class java.lang.Object不是一个泛型类 ======================== 正在测试的类:class me.cqc.GenericTest$1 获得的父类是:me.cqc.GenericTest<java.lang.String> 泛型参数有:class java.lang.String ======================== ``` 取得类的泛型参数需要满足两个条件: 1. 继承的类或实现的接口需要是泛型类 2. 当前类需要具体指定泛型的具体类 java在编译的时候会把泛型的类型信息擦除,但又为了在反射的时候能获得泛型信息就把这些泛型的信息存放在Signature属性中 通过Field来获得泛型参数 ```java Field field = GenericTest.class.getDeclaredField("myList"); //myList的类型是List Type type = field.getGenericType(); if (type instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType) type; Type[] argTypes = parameterizedType.getActualTypeArguments(); for (Type argType : argTypes) { System.out.printf("泛型参数有:%s \n", argType); } } ```
上一篇:
关于 IFS 变量在$*中应用的结果
下一篇:
Hadoop 原生的基于Writable序列化的RPC框架应用实例
文档导航