在 Java 中使用泛型时,您可能会遇到需要限制泛型类的类型以扩展特定的类型的情况。类并实现特定的接口。虽然预期以下尝试会成功似乎是合理的:
Class<? extends ClassA>
Class<? extends InterfaceB>
不幸的是,一次只能应用其中之一。那么,我们如何将这两个限制结合起来呢?
事实上,可以使用以下方法在泛型类型参数中指定多个接口或一个类和接口"&":
<T extends ClassA & InterfaceB>
这允许我们定义一个泛型类型,该类型仅限于扩展指定的类和实现指定的类接口。
例如,如果我们定义一个类ClassB和一个接口InterfaceC,我们可以创建一个泛型类,如下所示:
class MyClass<T extends ClassB & InterfaceC> { Class<T> variable; }
这样就保证了MyClass的变量字段只能保存对扩展 ClassB 并实现 InterfaceC 的类的引用。
虽然此功能为定义泛型类型提供了灵活性,但它也可能导致复杂的声明,如 Collections#max 的 JavaDoc 声明所示:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
这种复杂性是出于对二进制兼容性的考虑而产生的。但是,需要注意的是,这种复杂性主要是在定义泛型类或方法时遇到的,而不是在声明泛型变量时遇到的。
因此,要实现创建扩展特定类的类对象的目标,实现特定接口,您可以使用以下方法:
class classB { } interface interfaceC { } public class MyClass<T extends classB & interfaceC> { T variable; }
这将为您提供 MyClass 变量字段所需的限制。
以上是如何限制Java泛型类同时扩展类和实现接口?的详细内容。更多信息请关注PHP中文网其他相关文章!