限定类型(Bounded Type)是Java泛型中的一个概念,它允许你在定义泛型类型参数时设定一个边界,这个边界表明了泛型类型参数可以接受的类型范围。限定类型分为上界限定(Upper Bounded Wildcards)和下界限定(Lower Bounded Wildcards)。
上界限定(Upper Bounded Wildcards)
上界限定指定了类型参数必须是某个特定类的子类型,或者是这个特定类本身。在Java中,上界限定是通过关键字extends
来表示的。这里的extends
用于类和接口,表示泛型类型参数可以是这个类、这个接口或者它们的任何子类型。
语法
<T extends B>
这里,T
是泛型类型参数,而B
是上界,T
必须是B
或者B
的子类型。
例子
public class Box<T extends Number> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
在这个例子中,类型参数T
被限定为Number
或其子类,如Integer
、Float
等。
下界限定(Lower Bounded Wildcards)
下界限定指定了类型参数必须是某个特定类的父类型,或者是这个特定类本身。在Java中,下界限定是通过关键字super
来表示的。这意味着泛型类型参数可以是这个类或者它的任何父类型。
语法
<T super B>
这里,T
是泛型类型参数,而B
是下界,T
必须是B
或者B
的父类型。
例子
下界限定通常用于通配符类型而不是类型参数。例如:
public void addNumbers(List<? super Integer> list) {
list.add(10);
}
在这个例子中,list
的类型参数必须是Integer
或其父类,如Number
或Object
。
使用限定类型的好处
限定类型的主要好处是它提高了泛型的灵活性和安全性:
-
类型安全: 限定类型确保了泛型在使用时不会出现类型错误,因为编译器可以在编译时检查类型限制。
-
灵活性: 通过使用限定类型,你可以编写更加通用和灵活的代码,因为它允许你定义可以接受一组特定类型的泛型类或方法。
-
API设计: 在设计泛型API时,限定类型可以帮助你指定泛型方法或类应该如何以及在什么范围内使用,这有助于调用者正确使用你的API。
总结来说,限定类型是Java泛型系统中一个强大的特性,它允许开发者编写出既安全又灵活的泛型代码。通过使用限定类型,开发者可以确保泛型类型参数满足特定的类型约束,从而提升代码的质量和健壮性。