1. 有界泛型
1.1 有界泛型的定义
当我们需要一个工具类只用于做数值计算,或者只用于做集合的遍历,方法只希望接收Number或者Collection,不希望接受其他类型,否则就得写一大堆instanceof的if判断。
为了解决这个问题,我们需要定义泛型的上边界,即方法所能接收的层级最高的类型。
在Java中,用extends关键字可以实现有界泛型的定义。格式为:<T extends UpperBoundClass>,其中UpperBoundClass为上边界类型。代码实例如下所示:
public static <T extends Number> void computeNumber(T number1, T number2) {
//compute
}
public static <T extends Collection> void iter(T collection) {
//iterate
}
代码清单1
在使用代码清单1的工具方法的时,可以这么使用:
//compile success
Integer number1 = 0;
BigDecimal number2 = new BigDecimal("2");
computeNumber(number1, number2);
iter(new ArrayList<>(Arrays.asList("1", "2", "a")));
iter(new HashSet<>(Arrays.asList("1", "2", "a")));
//compile fail: Wrong 1st argument type
computeNumber("string1", number2);
代码清单2