泛 型(java基础学习)

泛型是一个参数化的实例,可传递一个或多个类型来创建实例,进行严格的类型检查。

定义:类<类型1,类型2,类型3.....>  对象名

例:List<E> mylist;  E可代表多种类型,如,标准类型,类,接口,也可是子类。。。 必须是单个大写字母。

E是一个类型变量,也是被类型替换的一个变量。之后可用作参数类型,或方法的返回类型或泛型中的方法。

Public boolean add<E o>   public E get(int index)

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

java7和以后中可写成:List<String> mylist =new ArrayList<>();

 

1、使用类型一:

泛 型(java基础学习)

 

2、泛型作为类型:

泛 型(java基础学习)

 

3、以键值对方式:


 泛 型(java基础学习)

泛型在5.0以后必须带有参数的泛型类型,否则编译器会报错

4、使用“?”通配符

 声名一个List<aType>aType可以是以下几种实例:

   AaType 的一个实例;

   BaType的子类的一个实例,如果aType是类的话;

   C、实现aType的类的一个实例,如果aType是个接口的话;

泛型本身也是个java类型,如java.lang.String java.io.File一样。将不同的类型变量列表传给一个泛型类型会产生不同的类型。如:

  List<Object> list1=new ArrayList<>();List<String> list1=new ArrayList<>();

尽管StringObject的一个类,但是List<String>与 List<Object>无关,因此,把List<String>传给一个需要List<Object>的方法,就会出错。解决办法是定义中使用通配符“?”。

例:

泛 型(java基础学习)

   

解决方法:

 

 泛 型(java基础学习)

-----------------------------------

泛 型(java基础学习)

 

注意:在声名或创建一个泛型时使用通本符是不合法的,如:List<?>list=new ArrayList<?>();

如果要接收任意类型的对象List 就要使用object作为类型变量List<Object> list1=new ArrayList<>();

5、在方法中使用有界通配符

定义:通用类型<? extends 上限类型>

:接收不同类型的的界限控制。

 泛 型(java基础学习)

在此 extends设置了类型变量的上限,也可以使用Super定义变量的下限。

-------------------------------------------------

6、编写泛型类型

泛 型(java基础学习)