5

我试过这个:

public static enum Types { A, B, C }
Class<Enum> e = Types.class;

但我得到一个“不兼容的类型”错误:

found   : java.lang.Class<id.Types>
required: java.lang.Class<java.lang.Enum>
    Class<Enum> e = Types.class;

据我所知,所有枚举都继承自 Enum。为什么我的枚举与枚举不兼容?

4

1 回答 1

10

为什么不只是Class<? extends Enum> e = Types.class;

UPD:我会给你更多解释的答案,为什么你的代码不起作用。

首先,表达式的类型Types.classClass<Types>,而你的变量eClass<Enum>

根据JLS 5.5.1,此类类型(即Class<Types>Class<Enum>)可证明是不同的类型(JLS 4.5),并且它们的擦除是相同的(只是Class),因此在这种情况下,当您尝试从Class<Types>to 转换时出现编译时错误Class<Enum>

于 2013-07-19T13:18:35.073 回答