2022-10-21
泛型 list 表示 类型
第四关 泛型之飞天遁地
小伙伴们,泛型我们已经学到第四关了,是不是感觉泛型很强大啊!但是不要得意,泛型也有“软肋”,
泛型在使用时,有时并不能随意指定任意类型,也就是说,泛型在使用时具有类型限制,具体体现为泛型之飞天 ;
就是泛型的上限,泛型之遁地 ; 就是泛型的下限。
来吧,我们一起来看一下泛型的上限和下限。
在泛型上限和下限的分析过程中,我们会看到 ?符号经常出现,在这里 ?表示通配符,表示任意类型,小伙伴们需要注意一下喔。
1.泛型通配符
切记: ?表示通配符,表示任意的类型。
如下代码:
ArrayList list1 ;
ArrayListlist2 = new ArrayList();
ArrayListlist3 = new ArrayList();
list1 = list2;// ? 表示 String类型
list1 = list3;// ? 表示 Integer类型
在这里,小伙伴一定要注意: ?这个符号神通广大,可以用来表示任意的泛型类型。
上述代码中创建了一个带?泛型list1。
如果把创建带String泛型的list2赋值为list1, 那么此时?表示String 类型
如果把创建带Integer泛型的list3赋值为list1, 那么此时?表示Integer类型
讲到这里,小伙伴基本上明白了?符号的含义了,通常 ?会出现在泛型的上限和下限定义中使用中,我们接下来看看?这个通配符,
在泛型的上限和下限过程怎么使用的,let`s go。
2.泛型的上限
定义的基本语法:定义基本语法:类名或者接口名,那么此时 ?表示T类型,或者T的子类型
我们通过一段List接口的源码来分析一下泛型的上限,源码如下:
public interface Listextends Collection{
/**
* 方法作用:将一个集合 添加到 List中,
* 这时集合的类型 ? extends E ,这里? 表示是E的子类类型,?的上限不能超过E
*/
boolean addAll(Collection c);
----
}
代码演示:
Listlist = new ArrayList();//创建一个集合: 泛型为Number
Listson1 = new ArrayList() ;
Listson2 = new ArrayList() ;
Liststr_list = new ArrayList();
list.addAll(son1);// ? 表示 Number,上限是Number
list.addAll(son2);// ? 表示Long,Long是Number的子类
// list.addAll(str_list);//编译报错: 原因 String 和 Number 没有继承关系
泛型的上限,就是在使用泛型时,不能超过extends后面定义的类型,所以大家在使用时,一定要注意类型的子、父级关系。
3.泛型的下限
定义基本语法: 类名或者接口名,那么此时 ?表示T类型,或者T的父类型
刚刚看了泛型的上限,那么下限对于小伙伴来说就会简单很多了。
我们还是通过List集合来分析泛型的下限。
比如:
List list = new ArrayList();//创建一个集合
list = new ArrayList();// ? 表示Integer
list = new ArrayList();// ? 表示Number: Number是Integer的父类
list = new ArrayList();// ? 表示Object: Object是Integer的父类
// list = new ArrayList();//编译报错: ? 表示String: String和Integer没有关系
泛型的下限,就是在使用泛型时,必须高于super后面的定义的类型,所以大家在使用时,一定要注意类型的父、子级关系
闯关练习
请描述 ? 通配符 在泛型中的具体使用(多选)。
A:在定义泛型的上限时: 可以使用?通配符 表示 泛型的子类
B:在定义泛型的下限时: 可以使用?通配符 表示 泛型的父类
C:在定义泛型时,可以不用 ?通配符
D: 以上说法都不对
答案:
ABC
开班时间:2021-04-12(深圳)
开班盛况开班时间:2021-05-17(北京)
开班盛况开班时间:2021-03-22(杭州)
开班盛况开班时间:2021-04-26(北京)
开班盛况开班时间:2021-05-10(北京)
开班盛况开班时间:2021-02-22(北京)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2020-09-21(上海)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2019-07-22(北京)
开班盛况Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号