【泛型】

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

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

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

    T selectById(Serializable id);
    
    //类型通配符:如List,表示元素未知,所以只能添加null。没泛型好用,但是适用上下限
	//上限:,允许该类及其子类
	//下限:,允许该类及其父类
    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()可以判断是否为桥接方法。
【泛型】_第1张图片

你可能感兴趣的:(java学习,java)