gpt4 book ai didi

Java 泛型与类和接口(interface) - 一起

转载 作者:行者123 更新时间:2023-12-01 16:37:51 27 4
gpt4 key购买 nike

我想要一个 Class 对象,但我想强制它所代表的任何类扩展类 A 并实现接口(interface) B。

我能做到:

Class<? extends ClassA>

或者:

Class<? extends InterfaceB>

但我不能两者兼得。有办法做到这一点吗?

最佳答案

事实上,你可以做你想做的事。如果您想提供多个接口(interface)或一个类加接口(interface),您的通配符必须如下所示:

<T extends ClassA & InterfaceB>

请参阅Generics Tutorial在 sun.com,特别是 Bounded Type Parameters部分,位于页面底部。如果您愿意,您实际上可以使用& InterfaceName列出多个接口(interface)。对于您需要的每一项。

这可能会变得任意复杂。要进行演示,请参阅 Collections#max 的 JavaDoc 声明,(换行成两行)是:

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

为什么这么复杂?正如 Java 泛型常见问题解答中所述:To preserve binary compatibility .

看起来这对于变量声明不起作用,但在类上放置通用边界时它确实有效。因此,要做你想做的事,你可能必须克服一些困难。但你可以做到。您可以这样做,在您的类上放置一个通用边界,然后:

class classB { }
interface interfaceC { }

public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}

获取variable有你想要的限制。有关更多信息和示例,请查看 Generics in Java 5.0 的第 3 页。请注意,在<T extends B & C>中,类名必须在前,接口(interface)在后。当然,您只能列出一个类。

关于Java 泛型与类和接口(interface) - 一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61922641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com