为什么要是用泛型
- 是用泛型后意味着编码可以被很多不同类型的对象是重用!
- 在java中增加泛型设计前,泛型程序设计采用继承实现。ArrayList类只维护一个Object数组,这么做有几个不好的地方,例如下面的例子
public static ArrayList{
private Object[] elementData;
...
public Object get(int i){...}
public void add(Object o){...}
}
1. 这里在获取值的时候必须要强制转换
2. 这里没有错误检查,可以向数组中添加任何类型的对象
这就导致了当Object为String时,强制转换为int时会报错
泛型的定义
- 类的定义
泛型就是一个具有一个或多个变量的类。
public class Pair<T>{
private T first;
private T second;
public Pair(){
first = null;
second = null;
}
public T getFirst(){
return first;
}
public T getSecond(){
return second;
}
public void setFirst(T newVlue){
first = newVlue;
}
public void setSecond(T newValue){
second = newValue;
}
}
在这里pair类引入一个类型变量T,你也可以引入多个类型变量
public class Pair<T,u>{
...
}
这里的变量类型指定方法的返回类型和局部变量例如:
private T first;
泛型方法
- 和泛型的类一样指定类型参数
public class ArrayAlg{
public static <T> T getMidd(T... a){
return a[a.lenght / 2];
}
}
类型变量放在修饰符的后面(public static)返回类型的前面
泛型方法的定义可以放在泛型类中也可以放在普通类中
- 如何调用泛型方法
String middle = ArrayAlg.<String>getMiddle("John","Q.","Public");
在调用方法时,在方法前的尖括号中放入具体的类型。当然在多数情况下我们可以省略具体的类型!编译器也可以额推导出来。这里指的是尖括号中的String类型