实际上,你可以做你想做的事。如果要提供多个接口或一个类加接口,则必须使通配符看起来像这样:
<T extends ClassA & InterfaceB>
请参见sun.com上的泛型教程,特别是页面底部的“ 绑定类型参数”部分。实际上,如果需要,你可以列出多个接口,并& InterfaceName根据需要使用每个接口。
这会变得任意复杂。为了演示,请参阅的JavaDoc声明Collections#max(分为两行)为:
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中的泛型的第3页。注意,在中<T extends B & C>
,类名必须排在最前面,然后是接口。当然,你只能列出一个班级。