「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」。
茫茫人海千千万万,感谢这一秒你看到这里。希望我的文章对你的有所帮助!
愿你在未来的日子,保持热爱,奔赴山海!
前言:昨天我们终于讲完了泛型通配符的基本使用,
所以,接下来我们将会对泛型通配符的学习--泛型通配符的高级使用!
👺泛型通配符
在我们之前的学习泛型的过程当中,在当我们使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。
😟5.2 通配符高级使用
之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛型的上限和下限。
泛型的上限:
- 格式:
类型名称 <? extends 类 > 对象名称 - 意义:
只能接收该类型及其子类
泛型的下限:
- 格式:
类型名称 <? super 类 > 对象名称 - 意义:
只能接收该类型及其父类型
比如:现已知Object类,Animal类,Dog类,Cat类,其中Animal是Dog,Cat的父类
class Animal{}//父类
class Dog extends Animal{}//子类
class Cat extends Animal{}//子类
复制代码
-
首先我们先看下,泛型的上限
<? extends 类 >:// ArrayList<? extends Animal> list = new ArrayList<Object>();//报错 ArrayList<? extends Animal> list2 = new ArrayList<Animal>(); ArrayList<? extends Animal> list3 = new ArrayList<Dog>(); ArrayList<? extends Animal> list4 = new ArrayList<Cat>(); 复制代码可以看出,泛型的上限只能是该类型的类型及其子类。
-
我们再来看看泛型的下限
<? super 类 >:ArrayList<? super Animal> list5 = new ArrayList<Object>(); ArrayList<? super Animal> list6 = new ArrayList<Animal>(); // ArrayList<? super Animal> list7 = new ArrayList<Dog>();//报错 // ArrayList<? super Animal> list8 = new ArrayList<Cat>();//报错 复制代码可以看出,泛型的下限只能是该类型的类型及其父类。
-
一般泛型的上限和下限也是用来参数的传递:
再比如:现已知Object类,String 类,Number类,Integer类,其中Number是Integer的父类
public static void main(String[] args) {
Collection<Integer> list1 = new ArrayList<Integer>();
Collection<String> list2 = new ArrayList<String>();
Collection<Number> list3 = new ArrayList<Number>();
Collection<Object> list4 = new ArrayList<Object>();
getElement(list1);
getElement(list2);//报错
getElement(list3);
getElement(list4);//报错
getElement2(list1);//报错
getElement2(list2);//报错
getElement2(list3);
getElement2(list4);
}
// 泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
public static void getElement1(Collection<? extends Number> coll){}
// 泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
public static void getElement2(Collection<? super Number> coll){}
复制代码
学到这里,我们泛型也就学完了!
🌸总结
相信各位看官都对泛型有了全部的深入的了解和体验,在平时开发,比较常见使用在泛型的使用有集合框架中的List和Map。当然还有很多的应用,期待你慢慢发现!
那我们继续期待欢迎期待下一章的到来!
让我们也一起加油吧!本人不才,如有什么缺漏、错误的地方,也欢迎各位人才大佬评论中批评指正!当然如果这篇文章确定对你有点小小帮助的话,也请亲切可爱的人才大佬们给个点赞、收藏下吧,一键三连,非常感谢!
学到这里,今天的世界打烊了,晚安!虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!
感谢各位看到这里!愿你韶华不负,青春无悔!




近期评论