MOOC 个人学习笔记

# 1. 泛型基础

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

# 2. 自定义泛型设计

# 泛型类

  • 具有泛型变量的类
  • 在类名后用 <T> 代表引入类型
    • 多个字母表示多个引入类型如 <T, U> 等
    • 引入类型可以修饰成员变量 / 局部变量 / 参数 / 返回值
    • 没有专门的 template 关键字
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> 在修饰符后,返回类型前
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 也可以再是一个泛型类
public interface Calculator<T> {
    public T add(T operand1, T operand2);
}