【泛型】

发布时间:2024年01月19日

早期用Object表示任意类型,在编码期就不会报错。
问题:但当使用向下强转,出现类型不一致时,运行期就会报错。
解决:所以在JDK1.5引入了泛型,直接在编码期限制类型,主要用于集合中。

泛型类、泛型方法、类型通配符、上下限

//泛型派生子类:子类暂不明确类型就BaseMapper<T> extends Mapper<T>,
//             明确就OrderMapper extends BaseMapper<Order>
public interface BaseMapper<T> extends Mapper<T> {
	private T entity;
    int insert(T entity);

    T selectById(Serializable id);
    
    //类型通配符:如List<?>,表示元素未知,所以只能添加null。没泛型好用,但是适用上下限
	//上限:<? extends Serializable>,允许该类及其子类
	//下限:<? super Serializable>,允许该类及其父类
    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    T selectOne(@Param("ew") Wrapper<T> queryWrapper);
}

类型擦除

JDK1.5出现泛型,为了兼容以前的代码。对于带有泛型的类,在编译之后用Object来代替,生成的Class字节码文件不会出现泛型信息,这个过程叫做类型擦除。
在这里插入图片描述
但是新的问题又出现了,看编辑之后的代码,子类重写的方法的方法签名已经和父类不一致了,那么@Override就会报错。

桥接方法

所以JDK1.5引入泛型之后,为了兼容泛型编译的字节码和JDK1.5之前的,就使用了桥接方法。就是再写一个方法,去强转类型
在这里插入图片描述
所以,当我们去获取类中的方法时,会有2个。使用method.isBridge()可以判断是否为桥接方法。
在这里插入图片描述

文章来源:https://blog.csdn.net/ExceptionCoder/article/details/135697554
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。