📜  Java泛型-上界通配符(1)

📅  最后修改于: 2023-12-03 15:32:03.874000             🧑  作者: Mango

Java泛型-上界通配符

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作为参数,而不能使用10L10.0作为参数,因为它们的类型分别为LongDouble,不是Number类及其子类。

总结

本文介绍了Java泛型中的上界通配符,它是通过extends关键字进行限定的,表示只允许上界类型及其子类作为参数类型。通过使用上界通配符,可以在方法调用时限定参数类型,提高代码的健壮性。