我希望有一个类对象,但我想强制它所表示的任何类扩展类a并实现接口B
我可以做到:
类<;?扩展ClassA>;
或:
类<;?扩展接口b>;
但我不能两者都做。有办法做到这一点吗
实际上,你可以做你想做的事。如果要提供多个接口或一个类加接口,则必须使通配符看起来像这样:
<;T扩展了ClassA&;接口b>;
请参阅sun.com上的泛型教程,特别是有界类型参数部分,位于页面底部。如果愿意,您可以使用&;列出多个界面;InterfaceName,用于您需要的每一个
这可能会变得任意复杂。要演示,请参见Collections\max,它(包装在两行上)是:
公共静态<;T扩展对象&;可比<;?超级T>&燃气轮机;T
最大值(集合<;?扩展T>;coll)
为什么这么复杂?正如Java泛型常见问题解答中所说:以保持二进制兼容性
看起来这对变量声明不起作用,但在类上放置泛型边界时确实起作用。因此,要想做你想做的事,你可能需要跳过几个圈。但你可以做到。您可以这样做,在类上设置通用边界,然后:
类B{}
接口接口{}
公共类MyClass<;T扩展b&;interfaceC>;{
类别<;T>;变量;
}
获取具有所需限制的变量。有关更多信息和示例,请查看Java 5.0中的泛型。注意,在中<;T扩展B&;C>,类名必须排在前面,接口紧随其后。当然,你只能列出一个类