我想要一个Class对象,但是我希望它所代表的类强制继承类A并实现接口B。
我可以这样做:
Class<? extends ClassA>
或:
Class<? extends InterfaceB>
但我不能两者兼顾,有什么办法可以做到这一点吗?
我想要一个Class对象,但是我希望它所代表的类强制继承类A并实现接口B。
我可以这样做:
Class<? extends ClassA>
或:
Class<? extends InterfaceB>
但我不能两者兼顾,有什么办法可以做到这一点吗?
实际上,你是可以做你想要的事情的。如果你想提供多个接口或者一个类加接口,你需要让你的通配符看起来像这样:
<T extends ClassA & InterfaceB>
& InterfaceName
。Collections#max
的JavaDoc声明,它(换行成两行)是:public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
要获取符合你要求的变量
。更多信息和示例,请查看Java 5.0中的泛型第3页。请注意,在<T extends B & C>
中,类名必须放在前面,接口紧随其后。当然,你只能列出一个类。
?
的通配符)来完成此操作,但可以使用“命名”类型参数。只需在方法或类级别声明类型参数即可。import java.util.List;
interface A{}
interface B{}
public class Test<E extends B & A, T extends List<E>> {
T t;
}
?
,所以它真的是一个“通配符”吗?我问这个问题是因为当类型参数真的是通配符时,我无法使“同时扩展两个东西”的整个概念正常工作。 - The111