Java基础第二十五天总结——泛型

目录:

一、为什么要有泛型

二、在集合中使用泛型

三、自定义泛型结构

四、泛型在继承上的体现

五、通配符的使用

六、泛型应用举例

/*--------------------分割线--------------------*/

一、为什么要有泛型

1.解决元素存储的安全性问题。

2.解决获取数据元素时,需要类型强制转换的问题。

 

二、在集合中使用泛型

ArrayList<Integer> list = new ArrayList<>();

基本数据类型需要用到包装类。

三、自定义泛型结构

泛型的声明:

interface List<T> 和class GenTest<K,V>

其中T,K,V表示类型,常用T表示。

泛型的实例化:

一定要在类名后面指定类型参数的值(类型)。

List<String> strList = new ArrayList<String>();

把一个集合中的内容限制为一个特定的数据类型,这就是generics背后的核心思想。

使用泛型的主要优点是能够在编译时而不是在运行时检测错误。

1.泛型类可能有多个参数,此时应将多个参数一起放在尖括号内。如:

<E1,E2,E3>

2.泛型类的构造器如下:public GenericClass(){}。

3.实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致。

4.泛型不同的引用不能相互赋值。

5.泛型如果不指定,均按Object处理。

经验:泛型要使用一路都用,要不用,一路都不要用。

6.如果泛型结构是一个接口或抽象类,则不可创建泛型类的对象。

7.静态方法中不能使用类的泛型。

8.异常类不能是泛型。

9.父类有泛型,子类可以保留也可以指定泛型类型。

泛型方法的格式:

[访问权限]  <泛型> 返回类型 方法名 ([泛型表示 参数名称]) 抛出的异常

四、泛型在集成上的体现

五、通配符的使用

List<?>是List<Object>List<String>等各泛型的父类。

null是所有类型的成员。

通配符指定上限:

上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口即 <=

通配符指定下限:

下限super:使用时指定的类型不能小于操作的类,即>=

<? extends Number> (无穷小 , Number]
只允许泛型为Number及Number子类的引用调用
 <? super Number> [Number , 无穷大)
只允许泛型为Number及Number父类的引用调用
 <? extends Comparable>
只允许泛型为实现Comparable接口的实现类的引用调用

六、泛型应用举例

原文地址:https://www.cnblogs.com/zhoutie170821/p/12056679.html