关于Java中泛型的上界和下界理解

2023-05-17,,

既然聊到了泛型的上下界问题,就先给出几个类的继承关系吧

class Fruit{}
class Apple extends Fruit{}
class Orange extends Fruit{}
class HongFuShi extends Apple{}
顶级父类Fruit下面有两个直接子类Apple和Orange,苹果Apple类的直接子类是HonGFuShi

先说下基础知识:我们知道List<Fruit>中是不能放Apple对象的,同时java是支持向上转型的,也就是父类的引用可以指向子类的对象->Fruit f = new Apple()

List<? extends Fruit> list 的上界就是Fruit,所以只可以存放Fruit本身和Fruit的子类对象 List<? extends Fruit> list= new ArrayList<Apple>()
因此<>里面可以是Apple也可以是Orange,当然也可以是Fruit。但是我们不能使用list.add(new Apple())或者list.add(new Fruit()),因为Fruit的子类有很多种类型,
存的时候不知道到底是那种类型,但是get的时候是没有问题的,因为get出来的都可以向上转型成Fruit。

List<? super Apple> list的下界就是Apple,所以只能存放Apple以及Apple的父类对象 List<? super Apple> list = new ArrayList<Fruit>()
因此<>里面只能是苹果类型或者苹果Apple的父类。所以存放的时候只能存放Apple(包括子类)类型,不能存放Apple的父类因为父类有好多种,但是子类和Apple都能确定是Apple类型。
list.add(new Apple()),list.add(new HongFuShi())都是可以的,但是list.add(new Fruit())不行
但是get的时候就需要注意了,可以使用Apple去承接,或者你知道具体哪个位置比如:list.get(0) 返回的是Apple类型。list.get(1)可以是Apple也可以是HonGFuShi类型。

关于Java中泛型的上界和下界理解的相关教程结束。

《关于Java中泛型的上界和下界理解.doc》

下载本文的Word格式文档,以方便收藏与打印。