带有类&一个界面-在一起

我希望有一个类对象,但我想强制它所表示的任何类扩展类a并实现接口B

我可以做到:

类<?扩展ClassA>

或:

类<?扩展接口b>

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

实际上,你可以做你想做的事。如果要提供多个接口或一个类加接口,则必须使通配符看起来像这样:

<T扩展了ClassA&接口b>

请参阅sun.com上的泛型教程,特别是有界类型参数部分,位于页面底部。如果愿意,您可以使用&列出多个界面;InterfaceName,用于您需要的每一个

这可能会变得任意复杂。要演示,请参见Collections\max,它(包装在两行上)是:

公共静态<T扩展对象&可比<?超级T&gt&燃气轮机;T
最大值(集合<?扩展T>coll)

为什么这么复杂?正如Java泛型常见问题解答中所说:以保持二进制兼容性

看起来这对变量声明不起作用,但在类上放置泛型边界时确实起作用。因此,要想做你想做的事,你可能需要跳过几个圈。但你可以做到。您可以这样做,在类上设置通用边界,然后:

类B{}
接口接口{}
公共类MyClass<T扩展b&interfaceC>{
类别<T>变量;
}

获取具有所需限制的变量。有关更多信息和示例,请查看Java 5.0中的泛型。注意,在中<T扩展B&C&gt,类名必须排在前面,接口紧随其后。当然,你只能列出一个类

发表评论