pc端和移动端的网站区别是什么意思,内容电商的网站如何做,为什么局域网做网站,如何诊断网站在我们搭建框架中往往会用到泛型,我们知道泛型的好处是在编译的时候检查类型安全#xff0c;并且所有的强制转换都是自动和隐式的#xff0c;代码的重用率高
然而有时候method的入参并不能直接强制转换成泛型的类型,比如说下面这段代码#xff1a; 很明显String 类…在我们搭建框架中往往会用到泛型,我们知道泛型的好处是在编译的时候检查类型安全并且所有的强制转换都是自动和隐式的代码的重用率高
然而有时候method的入参并不能直接强制转换成泛型的类型,比如说下面这段代码 很明显String 类型不能强制转换成T 那我们会需要用到FastJson或者GSON这种类型转换工具进行类型的转换工作 但FastJson和Gson 内方法是这样的
public static T T parseObject(String text, ClassT clazz) {return parseObject(text, clazz, new Feature[0]);}
123
ClassT clazz 是显式的类型。 直接使用的话会报错 不能直接使用T那么我们需要获取到T的ClassT clazz 下面是获取泛型T的ClassT clazz两种方法
一种是使用反射类reflectClass? super T rawType;rawType (Class T) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
12
getActualTypeArguments()[0]中 ‘0’ 代表的是第一个泛型类型。
第二种采用Gson来获取
Class? super T rawType;public BaseCallback() {this.mType getSuperclassTypeParameter(getClass());this.rawType (Class? super T) $Gson$Types.getRawType(mType);}static Type getSuperclassTypeParameter(Class? subclass) {Type superclass subclass.getGenericSuperclass();if (superclass instanceof Class) {throw new RuntimeException(Missing type parameter.);}ParameterizedType parameterized (ParameterizedType) superclass;return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);}
123456789101112131415
Class? super T rawType就是我们泛型T的数据类型ClassT clazz