📜  Java泛型-有界类型参数(1)

📅  最后修改于: 2023-12-03 14:43:01.711000             🧑  作者: Mango

Java泛型-有界类型参数

在Java中,泛型可以使用有界类型参数来限制参数类型必须是某个类或其子类,或必须实现某个接口。这种机制称为有界类型参数。

语法

定义有界类型参数时,需要在类型参数名后加上 extends 关键字,然后跟上限定类型。有两种形式:

  1. 限定类型为类或接口:

    <T extends SomeClass>
    <T extends SomeInterface>
    <T extends SomeClass & SomeInterface> // 同时限定为某个类和某个接口
    
  2. 限定类型为类或接口且有多个父类:

    <T extends A & B & C>
    
例子

下面是一个使用有界类型参数的例子。假设有一个 Box 类,用于存储元素,我们希望只能存储实现了 Comparable 接口的元素,以便进行比较。

public class Box<T extends Comparable<T>> {
    private T value;

    public Box(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }

    public boolean isGreaterThan(Box<T> other) {
        return value.compareTo(other.getValue()) > 0;
    }
}

上面代码中,Box 类使用类型参数 T,并限定 T 必须实现 Comparable 接口。这样,我们就可以在 isGreaterThan 方法中调用 value 对象的 compareTo 方法进行比较了。

注意事项
  • 有界类型参数只能用于类、接口、泛型方法,并且必须在声明泛型类型时指定。
  • 可以使用多个限定类型,但必须把 extends 放在第一个限定类型后,并用 & 隔开。例如:<T extends A & B & C>
  • 有界类型参数可以是泛型类型,例如:<T extends List<String>>