Java泛型函数编译失败:需要接口类型



我正在尝试一个来自" Effective Java "项目34的示例代码片段。我用jdk1.8 win10。

package mygroup;
import java.util.*;
public class ExtendsEnum {
private static enum Operation {
Plus,
Minus;
}
public static <T extends Enum<T> & Operation> // error
void testEnumClass(Class<T> opSet) {
for (Operation op : opSet.getEnumConstants()) {
System.out.println(op);
}
}
public static void main(String[] args) {
ExtendsEnum.testEnumClass(Operation.class);
}
}

编译器说:需要接口类型。我不确定问题行上的程序在jdk1.8中是否仍然有效,我只是试图从书中的示例代码复制。jdk是否识别:

<T extends Enum<T> & Operation>

如果没有,如何修复?

中使用&时通用的界限,只有第一部分可能是一个类。其他一切都必须是接口。Operation不是接口,这就是它失败的原因。

但是你的例子没有意义。只有一种类型与T extends Enum<T> & Operation匹配,那就是Operation本身。为什么要使用泛型类型呢?

以下是可能的(是的,OperationEnum是个糟糕的名字):

interface Operation { /* some methods */ }
enum OperationEnum implements Operation { /* constants, methods from Operation */ }

但是,除非您定义了一个接口,该接口实际上添加了不在枚举中的方法(如name()ordinal()),否则没有必要使用比T extends Enum<T>更强的绑定。

相关内容

  • 没有找到相关文章

最新更新