一、什么是泛型
我们常用的List<String>a=new ArrayList<String>();
中的String就是泛型
二、泛型的作用
程序报错包括两种:
- 编译时出错
- 运行时出错
当一个Object类是非数字字符串时,强制类型转化为integer就会运行出错,使得程序员无法在编译时发现错误,导致这些错误可能在没有被发现时该程序就投入应用。
泛型使得编译器能够识别具体的类
三、定义泛型类
和使用一样,用<>来定义泛型类
public class Test<T>{
private T content;
public Test(T content){
this.content=content;
}
public T get(){
return this.content;
}
}
T在运行时可以是Object也可以是String,Integer等类型,使用方法如下:
Test<String>test=new Test<String>();
此时test实例中的content就被指定为String类型,并且编译器可识别,诸如:
Integer a=test.get();
就会被编译器识别报错。
四、用extend限定类型参数
public class Test<T extends Number>{
private T content;
public Test(T content){
this.content=content;
}
public T get(){
return this.content;
}
}
T extends Number
就表示T泛型必须是Number的子类,不然编译器就会报错。
五、泛型数组
不能用泛型来定义数组
public class Test<T>{
private T[] content=new T[10];//出错,不能用泛型定义数组
public Test(T content){
this.content=content;
}
public T get(){
return this.content;
}
}
只能通过客户类来指定泛型的具体类型然后创建实例。