一.泛型是什么:
泛型是指参数化类型的能力。
可以定义带泛型的类,方法或者接口。随后编译器会具体的类型来替换它。
二.泛型的好处:
下面先看一个的小demo:
List list = new ArrayList();
list.add(1);
list.add(2);
list.add("3");//一不小心插入了 String
for (Object object : list){
//取出“3”时报 错 : ClassCastException
Integert = (Integer)object;
}
由于对象进入集合后失去了其状态信息,所以取出来时需要进行强制类型转换。
上面是一个集合没有使用泛型时出现的错误,那么当我们使用泛型时,该错误就会避免,例如:
List<Integer>list = newArrayList<Integer>();
list.add(1);
list.add(2);
list.add("3");//插入String, 运行时不出错但在编译会报错误
//定义一个接口
interface Friuit<E>{
boolean eat(E e);
}
//定义一个类
public class Apple<T>{
private T info;
public Apple(T info) {
this.info = info;
}
public T getInfo(){
return this.info;
}
public void setInfo(T info){
this.info = info;
}
public static void main(String[] args) {
Apple<String> ap1 = newApple<String>("小苹果");
System.out.println(ap1.getInfo());
Apple<Double> ap2 = newApple<Double>(1.23);
System.out.println(ap2.getInfo());
}
}
//
定义一个f泛型方法
public static <E> void print(E[] list){}
所谓泛型方法,就是在声明方法时定义一个或多个类型形参。泛型方法的用法格式如下:
修饰符 < T> 返回值类型 方法名(形参列表 E[] list){
//方法体
}
把上面方法的格式和普通方法的格式进行对比,不难发现泛型方法的方法签名比普通方法的方法签名多了
1.类型形参声明,
2.类型形参声明以尖括号包括起来,
3.多个类型形参之间以逗号(,)隔开,
4.所有的类型形参声明方法方法修饰符和方法返回值类型之间。
三.泛型使用的注意事项:
1.不能使用泛型类型参数来创建数组。
2.不能使用泛型类型参数来创建实例。
3.不能在静态环境中使用类的泛型类型参数。
4.在异常类中不能使用泛型类型