范型的目的
-
代码被不同类型的对象所重用:
- 范型以前依靠Object的继承来实现,问题在于没有类型检查,Cast错误在最后一刻发生。
- 范型:在编译器层次对代码进行检查,避免类型错误,带来更好的可读性和安全性。
-
范型的语法:
- 范型类:
ArrayList<String> files = new ArrayList<String>();
- 范型方法:
- 定义:
public static <T> T getMiddle(T... a) {return a[a.length/2];}
- 调用:
String middle = ArrayAlg.<String>getMiddle("M", "Q", "A");
- 定义:
- 范型类:
-
范型设计的3个层次:
- 能使用范型库
- 用Java范型的原理来解决问题
- 设计自己的范型库和范型方法
简单的范型类
-
类型变量经常用单个大写字母来表示
- E:数组元素
- K、V:键和值
- T(及相邻字母U、S):类型
-
范型类可以看作是普通类的工厂
public class Pair<T> {
private T first;
private T second;
public Pair() {first = null; second = null;}
public Pair(T first, T second) {
this.first = first; this.second = second;}
public T getFirst() {return first;}
public T getSecond() {return second;}
public void setFirst(T newValue) {first = newValue;}
public void setSecond(T newValue) {second = newValue;}
}
这个范型类在指定类型后Pair<String>
,变为:
Pair<String>
private String first;
private String second;
Pair<String>()
Pair<String>(String, String)
String getFirst();
String getSecond();
void setFirst(String);
void setSedond(String);
有限定的范型类
-
T需要支持compareTo方法,所以不能是随意的类,必须
implements Comparable
接口。可以对范型类型进行限定:public static <T extends Comparable> T min(T[] a)
-
范型的限定可以支持多个接口:用&连接
<T extends Comparable & Serializable>
网友评论