如何声明一个只能包含枚举类的变量?

cev*_*ing 5 java

我试过这个:

public static enum Types { A, B, C }
Class<Enum> e = Types.class;
Run Code Online (Sandbox Code Playgroud)

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

found   : java.lang.Class<id.Types>
required: java.lang.Class<java.lang.Enum>
    Class<Enum> e = Types.class;
Run Code Online (Sandbox Code Playgroud)

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

And*_*niy 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>Class<Enum>.