首页 > Java > java教程 > 如何限制Java泛型类同时扩展类和实现接口?

如何限制Java泛型类同时扩展类和实现接口?

Barbara Streisand
发布: 2024-12-08 02:44:15
原创
451 人浏览过

How Can I Restrict a Java Generic Class to Extend a Class and Implement an Interface Simultaneously?

具有类和接口的 Java 泛型

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板