9.3.4 设定泛型形参的上限
9.3.4 设定泛型形参的上限
Java
泛型不仅允许在使用通配符形参时设定上限,而且可以在定义泛型形参时设定上限,用于表示传给该泛型形参的实际类型要么是该上限类型,要么是该上限类型的子类。
设置单个类上限
下面程序示范了这种用法。
1 | public class Apple<T extends Number> { |
上面程序定义了一个Apple
泛型类,该Apple
类的泛型形参的上限是Number
类,这表明使用Apple
类时为T形参传入的实际类型参数只能是Number
或Number
类的子类。上面程序在代码1 处将引起编译错误:类型T的上限是Number
类型,而此处传入的实际类型是String
类型,既不是Number
类型,也不是Number
类型的子类型,所以将会导致编译错误。
可以设置一个类上限 多个接口上限
在一种更极端的情况下,程序需要为泛型形参设定多个上限(至多有一个父类上限,可以有多个接口上限),表明该泛型形参必须是其父类的子类(是父类本身也行),并且实现多个上限接口。如下代码所示。
1 | import java.io.Serializable; |
类上限要写在接口上限前面
与类同时继承父类、实现接口类似的是,为泛型形参指定多个上限时,所有的接口上限必须位于类上限之后。也就是说,如果需要为泛型形参指定类上限,类上限必须位于第一位。