内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
想要一个Class对象,但我想强制它所代表的任何类扩展类A并实现接口B。
能做到:
Class<? extends ClassA>
或:
Class<? extends InterfaceB>
但我不能兼而有之,有办法吗?
如果你想提供多个接口或类加接口,则必须使通配符看起来如下所示:
<T extends ClassA & InterfaceB>
如果愿意,实际上可以列出多个接口,使用& InterfaceName
为你需要的每一个。
这会变得很复杂。它(包装在两行)是:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
为什么这么复杂?正如Java泛型常见问题中所说的那样:保持二进制兼容性...
它看起来不适用于变量声明,但当将泛型边界放在类上时,它确实有效。因此,要做你想做的事,你可能需要跳过几圈。但你能做到。你可以这样做,在类上设置一个通用边界,然后:
class classB { } interface interfaceC { } public class MyClass<T extends classB & interfaceC> { Class<T> variable; }
得到variable
有你想要的限制。有关更多信息和示例,请参阅Java 5.0中的泛型.注,在<T extends B & C>
,类名必须放在第一位,然后是接口,你只能列出一个类。