【发布时间】:2016-08-26 12:56:28
【问题描述】:
我有几个实现一些通用接口的枚举,我想从方法中返回类文字。但是我无法正确指定交集类型。请参阅下面说明问题的代码示例。
public class GenericsTest {
interface Iface {
}
enum E1 implements Iface {
}
enum E2 implements Iface {
}
<E extends Enum<E> & Iface> Class<E> getEnum1() {
return E1.class; //ERROR incompatible types: java.lang.Class<GenericsTest.E1> cannot be converted to java.lang.Class<E>
}
Class<? extends Enum<?>> getEnum3() {
return E1.class; //OK
}
Class<? extends Iface> getEnum4() {
return E1.class; //OK
}
<E extends Enum<E> & Iface> void enumParam(Class<E> p) {
enumParam(E1.class); //OK
}
}
#getEnum1 方法无法编译。有趣的是,它在#enumParam 中用作参数值。如何指定交集类型才能从方法返回类文字?
【问题讨论】:
-
我认为这与有界通配符泛型类型中的多个接口无关。即使签名只有
<E extends Enum<E>> Class<E> getEnum1(),它也不会编译。