Java基础-泛型

概念:

泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候可以使用泛型;

泛型也可以看出是一个变量,用来接收数据类型  

泛型,用来灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数进行传递。

 

一、自定义和使用含有泛型的类

注意:泛型定义在类后

格式:

public class 类名<T> {}

 

使用方式:

直接new创建对象的时候确定泛型的数据类型;不写泛型则是Object类型,

例子:ArrayList<Object> arrayList = new ArrayList<>();

 

注意:如若想要使用String类的方法则要向下转型;使用泛型的类这不需要向下转型

 

二、自定义和使用含有泛型的方法

注意:泛型定义在方法的修饰符和返回值之间

格式:

public  <T>  void method(T t){方法体}

 

使用方式:

含有泛型的方法,在调用方法的时候确定泛型的数据类型,

传递什么类型的参数,泛型就是什么类型

 

例子:

Java基础-泛型

 

三、自定义和使用含有泛型的接口

注意:泛型定义在接口后

格式:

public interface 接口名<T> {}

 

1.第一种使用方式:

步骤一.定义接口的实现类,

步骤二.指定接口的泛型,

例子:Scanner类实现了Iterator泛型接口后并指定泛型为String;

Java基础-泛型

2.第二种使用方式:

步骤一.接口使用什么泛型,

步骤二.实现类就使用什么泛型,类跟着接口走;

例子:创建ArrayList对象并指定泛型为String;

Java基础-泛型

注意:就相当于定义了一个含有泛型的类,创建对象的时候确定泛型的类型;

 

泛型通配符

类型通配符一般是使用?代替具体的类型参数;

如:List<?>,在逻辑上是List<String>,List<Integer> 等所有List<具体类型实参>的父类。

注意:

1.一旦使用了泛型通配符!只能使用Object类中的共性方法,集合中元素自身方法无法使用。

2.泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。

   此时只能接受数据,不能往该集合中存储数据。

3.泛型没有继承概念

 

普通使用:

1.在创建对象的时候不能用泛型通配符,只能在传参的时候使用泛型通配符

Java基础-泛型

高级使用(受限泛型):

泛型的上限限定: ? extends E 代表使用的泛型只能是E类型的子类/本身

泛型的下限限定: ? super E 代表使用的泛型只能是E类型的父类/本身

Java基础-泛型

 

创建集合对象,使用泛型好处:

1,避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型

2,把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)

比如object类型在向下转型String时,若存在int数据则会报错

 

Java基础-泛型

 

创建集合对象,使用泛型弊端:

1.泛型是什么类型,只能存储什么类型的数据;