泛型

一、概述
1、没有泛型:编译时不报错,运行时报错ClassCastException
2、泛型好处:编辑期检查、减少了数据类型转换
3、泛型的本质就是参数化类型,也就是定义形参

二、泛型类
1、创建对象的时候指定具体的数据类型
2、泛型类,如果没有指定具体的数据类型,此时,操作类型是Object
3、泛型的类型参数只能是引用类型,不能是基本数据类型,如:int
4、同一个泛型类,根据不同的数据类型创建的对象,本质上是同一个类型(同一个class对象)。
注:可以结合后面的泛型擦除理解,泛型擦除之后 Generic < String > 和Generic< Integer >都是Generic类。
5、泛型类中可以有多个泛型,例:class Generic<K,V>

三、从泛型类派生子类
1、子类也是泛型类,子类和父类的泛型类型要一致,例:class ChildGeneric<T> extends Generic<T>
2、子类不是泛型类,父类要明确泛型的数据类型,例:class ChildGeneric extends Generic<String>

四、泛型接口
1、实现类也是泛型类,实现类和接口的泛型类型要一致,例:class Pair<T,E> implements Generator<T>
2、实现类不是泛型类,接口要明确数据类型,例:class Apple implements Generator<String>

五、泛型方法
1、public static <T,E,K> void printType(T t, E e, K k)--->public与返回值中间的泛型声明(<T,E,K>)非常重要,可以理解为声明此方法为泛型方法。


六、类型通配符(?)
1、类型通配符是类型实参,同String、Integer
2、通配符的上限:<? extends 实参类型>,例:ArrayList.public boolean addAll(Collection<? extends E> c)
3、通配符的下限:<? super 实参类型>,例:TreeSet.public TreeSet(Comparator<? super E> comparator)

七、类型擦除
1、泛型信息只存在于代码编译阶段,在进入JVM之前,与泛型相关的信息会被擦除掉,我们称之为–类型擦除。
2、无限制类型擦除:public T getKey()---->public Object getKey()

在这里插入图片描述
3、有限制类型擦除:public <E extends Number> E getValue(E value)---->public Number geValue(Number value)

在这里插入图片描述

八、泛型数组
1、可以声明带泛型的数组引用,但是不能直接创建带泛型的数组对象
2、创建1:ArrayList<String>[] listArr = new ArrayList[5];
3、创建2:
public class Fruit<T> {
    public T[] array;
    public Fruit(Class<T> clazz, int len) {
        array = (T[])Array.newInstance(clazz, len);
    }
}
4、开发时尽量不要使用泛型数组,而用泛型集合

九、

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值