泛型

为什么要有泛型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在集合中使用泛型

在这里插入图片描述
在这里插入图片描述
总结:

  1. 集合接口或集合类在jdk5.0时都修改为带泛型的结构.
  2. 在实例化集合类时, 可以指定具体的泛型类型
  3. 指明完以后, 在集合类或接口中凡是定义类或接口时, 内部结构(比如: 方法, 构造器, 属性等)使用到类的泛型的位置, 都指定为实例化的泛型类型. 比如: add(E e) —> 实例化以后: add(Integer e)
  4. 注意点: 泛型的类型必须是一个类, 不能是基本数据类型, 需要用到基本数据类型的位置, 拿包装类替换
  5. 如果实例化时没有指明泛型的类型. 默认类型为java.lang.Object类型

指明泛型以后的自然排序写法
上面implements可以实现Comparable<本类>, 然后重新生成实现方法
在这里插入图片描述
指明泛型以后的定制排序写法
在这里插入图片描述

自定义泛型结构

如何自定义泛型结构: 泛型类, 泛型接口, 泛型方法

泛型类定义,泛型接口就是把class改成interface即可,但是接口没有构造器

在这里插入图片描述

泛型类使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

注意子类继承泛型类

  1. 直接指明泛型, 子类不用泛型的概念, 相当于写死了, 就用Integer这个类型
    在这里插入图片描述
  2. 子类也需要泛型
    在这里插入图片描述

泛型方法

Collection接口中的toArray方法是泛型方法, 注意: 不是方法中使用了泛型类的泛型, 就叫做泛型方法了

泛型方法的声明, 与其是否在泛型类中没有关系, 即不在泛型类中也可以声明泛型方法
在这里插入图片描述
泛型方法的定义为: 在方法中出现了泛型的结构, 泛型的参数与类的泛型参数没有任何关系, 换句话说, 泛型方法所属的类是否是泛型类没有任何关系, 在前面需要加上声明使用泛型方法

举例:
在这里插入图片描述
泛型方法可以是static的, static需要加在<E>之前, 原因: 泛型参数是在调用方法时确定的, 并非在实例化类时确定的 区别于泛型类中静态的方法不能用泛型类中的泛型

泛型在继承上的体现

虽然类A 是 类B的父类 但是 G<A>G<B>例如List<A>List<B>不具备子父类关系, 二者是并列关系
补充: 类A是类B的父类, A<G>B<G> 例如List<String>ArrayList<String> 就可以子类引用指向父类对象
在这里插入图片描述

通配符的使用

通配符?
类A是类B的父类, G<A>G<B>是没有关系的, 二者共同的父类是G<?>

在这里插入图片描述
对于 List<?> 就不能向其内部添加数据了, 除了添加null之外 list.add(null)
允许读取数据, 读取的数据类型为Object
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

extends的那种类型, 可以用父类接收, 不能用子类接收
super的那种类型, 只能用Object来接收
在这里插入图片描述

泛型应用举例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值