数据类型之----泛型

泛型

泛型:可以在类或方法中预支地使用未知的类型。

一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。

使用泛型的好处

<1>将运行时期的ClassCastException,转移到了编译时期变成了编译失败。

<2>避免了类型强转的麻烦。

泛型是数据类型的一部分,我们将类名与泛型合并一起看做数据类型。

泛型的定义与使用

我们在集合中会大量使用到泛型,这里来完整地学习泛型知识。

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

定义和使用含有泛型的类

定义格式:

修饰符 class 类名 { }

例如,API中的ArrayList集合:

泛型在定义的时候不具体,使用的时候才变得具体。在使用的时候确定泛型的具体数据类型。

class ArrayList{
public boolean add(E e){ }
public E get(int index){ }
....
}

使用泛型: 即什么时候确定泛型。

在创建对象的时候确定泛型

例如, ArrayList<string> list = new ArrayList<string>();/<string>/<string>

此时,变量E的值就是String类型,那么我们的类型就可以理解为:

class ArrayList<string>{
public boolean add(String e){ }
public String get(int index){ }
...
}
/<string>

再例如, ArrayList<integer> list = new ArrayList<integer>();/<integer>/<integer>

此时,变量E的值就是Integer类型,那么我们的类型就可以理解为:

class ArrayList<integer> {
public boolean add(Integer e) { }
public Integer get(int index) { }
...


}
/<integer>

含有泛型的方法

定义格式:

修饰符 返回值类型 方法名(参数){ }

含有泛型的接口

定义格式:

修饰符 interface接口名 { }

定义类时确定泛型的类型

此时,泛型E的值就是String类型。

始终不确定泛型的类型,直到创建对象时,确定泛型的类型

泛型通配符

泛型通配符

当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。

通配符基本使用

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

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

泛型不存在继承关系 Collection list = new ArrayList();这种是错误的。

通配符高级使用----受限泛型

之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛型的上限和下限。