泛型是一种未知的数组类型,当我们不知道使用什么数据类型的时候,可以使用泛型
将数据类型当做参数传递
泛型可以也可以看出是一个变量,用来接收数据类型
E e:Element元素 未知的类型
T t:Type类型
创建集合对象,不使用泛型:默认的类型就是Object类型,可以存储任何类型,但是不安全,会引发异常
第一种使用方法;定义接口的实现类,实现接口,指定接口的泛型
格式:
修饰符 interface接口名<代表泛型的变量>{}
public interface Iterator<E> {
E next();
}
Scanner类实现了Iterator接口,并指定接口的泛型为String,所以重写next方法
public final class Scanner implements Iterator<String>{
public String next(){}
}
第二种方法:接口使用什么泛型,实现类使用什么泛型,类跟着接口走
就相当于定义一个含有泛型的类,创建对象的时候确定泛型的类型
格式:
public interface List<E>{
bolean add(E e);
E get(int index);
}
public calss ArrayList<E> implements List<E>{
public bolean add(E e);
public E get(int index);
}
定义含有泛型的的类
格式:
修饰符 class 类名<代表泛型的变量>{}
class ArrayList<E>{
public boolean add(E e){}
public E get(int index){}
}
泛型通配符
当使用泛型类或者接口时,传递的数据中,泛型的类型不确定,可以通过通配符<?>表示,一旦使用通配符,只能使用Object类中的共性方法,集合中的元素自身的方法无法使用。
泛型通配符:
?:代表任意的数据类型
使用方法:
不能创建对象使用
只能作为方法的参数传递
定义一个方法,能遍历所有类型的ArrayList集合,此事不知道集合使用的数据类型,可以使用通配符?来接收数据
注意:
泛型没有继承概念的
public static void printArray(ArrayList<?> list){
Iterator<?> it = list.iterator();//使用迭代器遍历集合
while(it.hasNext()){
Object o = it.next();
System.out.println(o);
}
}
}