java 泛型详解+ 阿里fastjson 源码中的巧妙运用

本文详细介绍了Java泛型的基础知识,包括泛型类、泛型接口、泛型方法及其实际类型推断。接着探讨了反射中获取泛型的方式,解析了`ParameterizedType`和`TypeVariable`的源码。最后,文章通过阿里Fastjson库展示了泛型在实际开发中的巧妙运用,特别强调了`TypeReference`在反序列化过程中的关键作用。
摘要由CSDN通过智能技术生成

引言

在讲阿里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;
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值