面试题:什么是 Java 泛型的上下界限定符?

在Java中,泛型的上下界限定符用于对类型参数进行约束,使得类型参数只能是某个特定类型或其子类型(上界),或者只能是某个特定类型或其父类型(下界)。这种机制增强了代码的灵活性和类型安全性。

上界限定符(Upper Bounds)

使用关键字 extends 来定义上界。这意味着你可以指定一个类型参数必须是某个类或接口的子类型(包括该类或接口本身)。这允许你调用该类或接口中的方法,因为你知道这些方法在这个类型参数中是可用的。

语法:

<T extends SomeClassOrInterface>

示例:
假设有一个方法需要处理不同类型的集合,并且这些类型都实现了 Comparable 接口,这样我们就可以比较它们的元素。

public static <T extends Comparable<T>> int compare(T a, T b) {
    return a.compareTo(b);
}

这里 <T extends Comparable<T>> 表示类型参数 T 必须实现 Comparable<T> 接口,从而保证了可以调用 compareTo 方法。

下界限定符(Lower Bounds)

使用关键字 super 来定义下界。这表示类型参数必须是某个类的超类型(包括该类本身)。通常与通配符一起使用来指定泛型参数的最小限制。

语法:

<? super SomeClass>

示例:
如果你想要添加元素到一个列表中,并且希望这个列表能够接受某种类型的实例以及它的所有子类,则可以这样做:

public static void addNumbers(List<? super Integer> list) {
    for (int i = 1; i <= 10; i++) {
        list.add(i);
    }
}

在这个例子中,List<? super Integer> 表示列表可以包含 Integer 类型的数据或者是任何 Integer 的超类型(如 NumberObject),但是不能是 Integer 的子类型。

总结

  • 上界限定符 (extends):限制类型参数为某类型及其子类型,适用于希望利用基类或接口的方法时。
  • 下界限定符 (super):限制类型参数为某类型及其父类型,适用于写入操作,确保能向集合中加入特定类型及其子类型的对象。

理解如何正确地应用泛型的上下界限定符可以帮助编写更加通用且类型安全的代码,特别是在涉及复杂的继承层次结构或接口实现的时候。

THE END
喜欢就支持一下吧
点赞12 分享