少女祈祷中...

1.泛型基础

  • 泛型:Generic Programming,JDK1.5推出的特性
  • 泛型类: ArrayList,HashSet,HashMap等
  • 泛型方法:Collections.binarySearch,Arrays.sort 等
  • 泛型接口:List, Iterator 等

2.自定义泛型设计

泛型类

  • 具有泛型变量的类
  • 在类名后用<T>代表引入类型
    • 多个字母表示多个引入类型如<T, U>等
    • 引入类型可以修饰成员变量/局部变量/参数/返回值
    • 没有专门的template关键字
1
2
3
4
5
6
7
8
9
10
11
public class Interval<T> {
private T lower;
private T upper;

public Interval(T lower, T upper) {
this.lower = lower;
this.upper = upper;
}
//Getter and Setter
}
Interval<Integer> v1 = new Interval<Integer>(1,2);

泛型方法

  • 具有泛型参数的方法
  • 该方法可在普通类/泛型类中
  • <T>在修饰符后,返回类型前
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class ArrayUtil {
public static <T> T getMiddle(T... a)
{
return a[a.length/2];
}
}

public static void main(String[] args) {
String s1 = ArrayUtil.<String>getMiddle("abc", "def", "ghi");
Integer i1 = ArrayUtil.getMiddle(1,2,3);

//null is ok
String s2 = ArrayUtil.<String>getMiddle("abc", "def", null);

//error 寻找共同超类,再转型
Integer i2 = ArrayUtil.getMiddle(1,2.5f,3L);

}

泛型接口

  • 和泛型类相似,在类名后加<T>
  • T用来指定方法返回值和参数
  • 实现接口时,指定类型
  • T也可以再是一个泛型类
1
2
3
public interface Calculator<T> {
public T add(T operand1, T operand2);
}