📅  最后修改于: 2023-12-03 15:32:03.874000             🧑  作者: Mango
Java泛型中的通配符提供了一种机制,可以在不确切知道参数类型的情况下,仍然能够对泛型中的对象进行操作。通配符使用?
表示,可以用在类、接口、方法中。
从语法上来说,通配符可以分为上界通配符和无界通配符两种。本文主要介绍Java泛型中的上界通配符。
在Java泛型中,上界通配符是通过extends
关键字进行限定的。通配符后面添加的类型表示上界类的子类,即只有限定类型及其子类可以赋值给通配符。
下面是一个示例,定义了一个泛型类Box
,里面有一个方法checkNumber
,可以检查输入的数据是否与initialValue
相等。
public class Box<T extends Number> {
private final T initialValue;
public Box(T initialValue) {
this.initialValue = initialValue;
}
public boolean checkNumber(T number) {
return number.intValue() == initialValue.intValue();
}
}
在上述代码中,<T extends Number>
表示泛型类型参数T
必须是Number
类或其子类。在checkNumber
方法中,参数number
也是类型参数T
,并且使用了泛型限定类型,即T extends Number
,表示number
只能是Number
类及其子类。
使用上界通配符可以在方法调用时限定参数类型,提高代码的健壮性。例如,下面的代码可以检查Box
类的实例是否满足上界限制:
public static void main(String[] args) {
Box<Number> numberBox = new Box<>(10);
System.out.println(numberBox.checkNumber(10)); // true
System.out.println(numberBox.checkNumber(10L)); // false
System.out.println(numberBox.checkNumber(10.0)); // false
}
在上述代码中,泛型类型参数为Number
,表示只能使用实现了Number
类的子类。因此,可以使用10
作为参数,而不能使用10L
或10.0
作为参数,因为它们的类型分别为Long
和Double
,不是Number
类及其子类。
本文介绍了Java泛型中的上界通配符,它是通过extends
关键字进行限定的,表示只允许上界类型及其子类作为参数类型。通过使用上界通配符,可以在方法调用时限定参数类型,提高代码的健壮性。