引言
在讲阿里fastjson 之前,先讲下泛型的一些基础知识和在反射中如何获取泛型,觉得自己已经掌握的可以直接通过目录跳到最后查看
泛型类
泛型类的定义只要在申明类的时候,在类名后面直接加上< E>,中的E可以是任意的字母,也可以多个,多个用逗号隔开就可以。示例代码如下
public class SelfList<E> {}
泛型类中的实际类型的推断
那么什么时候确定这个E 的具体类型呢?其实是在new 一个对象的时候指定的,请看下面代码
public class SelfList<E> {
public void add(E e) {
if (e instanceof String) {
System.out.println(" I am String");
} else if (e instanceof Integer) {
System.out.println("I am Integer");
}
}
public static void main(String[] args) {
//这里创建的时候指定了String
SelfList<String> a = new SelfList<String>();
a.add("123");
//这里创建的时候指定了Integer
SelfList<Integer> b = new SelfList<Integer>();
b.add(123);
}
}
泛型接口
泛型接口和类的使用方式一样
public interface IndicatorTypeService<T> {}
//这里定义的时候指定具体类型为ProductSale,当然也可以这里没有指定具体类型
public class ProductSaleServiceImpl implements IndicatorTypeService<ProductSale> {}
泛型方法
这个我觉得是相对来说比较难得,大家集中注意力听我说,说不定你以前一直以为的泛型方法是假的。好,先给个假的泛型方法给大家验一下,还是上面代码的例子,为了方便阅读我再贴一遍代码
//注意这是个假的泛型方法,不要以为有一个E就是泛型方法哦
public void add(E e) {
if (e instanceof String) {
System.out.println(" I am String");
} else if (e instanceof Integer) {
System.out.println("I am Integer");
}
}
泛型方法的定义
好了,重点来了,给个真正的泛型方法定义出来
public <T> T get(T t) {
return t;