首页 >Java >java教程 >如何在 Java 泛型中组合类和接口界限?

如何在 Java 泛型中组合类和接口界限?

Susan Sarandon
Susan Sarandon原创
2024-12-05 22:58:10501浏览

How Can I Combine Class and Interface Bounds in Java Generics?

Java 泛型:组合类和接口边界

在 Java 中,泛型提供了定义可操作不同类型对象的类型的功能。当您想要创建一个在实现特定接口时限制为扩展特定类的类对象时,就会出现一个常见的挑战。

让我们考虑一个用例,我们想要创建一个 Class表示扩展 ClassA 并实现 InterfaceB 的类的对象接口。

不能同时执行两者?

最初,您可以尝试使用以下通配符:

Class<? extends ClassA>

Class<? extends InterfaceB>

但是,使用其中任何一个都不允许您同时强制执行这两个要求。

A解决方案

实现这一目标的关键是在通配符中使用多个边界。这种通配符的语法是:

<T extends Class & Interface>

将其应用到我们的场景中,我们得到:

Class<? extends ClassA & InterfaceB>

有界类型参数

如 Java 泛型中所述在教程中,您可以使用多个边界来指定类型参数必须扩展给定的类并实现一个或多个接口。使用 & 运算符分隔边界。

复杂示例

虽然此解决方案可以让您实现目标,但它可能会变得复杂。例如,考虑 Java 中的 Collections#max 方法,它具有以下声明:

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)

这种复杂的语法确保二进制兼容性,同时强制执行特定类型约束。

使用通用类

在您的用例中,您可以创建一个具有所需的通用类bounds:

public class MyClass<T extends ClassA & InterfaceB> {
    Class<T> variable;
}

此方法允许您创建具有所需限制的变量,例如:

MyClass<ClassB>.variable

以上是如何在 Java 泛型中组合类和接口界限?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn