我认为java.lang.Enum是一个枚举,但不是吗?
void test(Enum e) {
switch (e) {
case A: ...
}
}
不兼容的类型。找到:“ java.lang.Enum”,必需:“ char,byte, short,int,Character,Byte,Short,Integer,String或枚举'
答案 0 :(得分:1)
您不能那样做。请参阅:
JLS§14.11开关语句“ [开关的类型]表达式 必须为char,byte,short,int,Character,Byte,Short,Integer, 字符串,或枚举类型(第8.9节),或发生编译时错误。”
所有 enum 类型都隐式扩展 java.lang.Enum ,但是 enum 是一种特殊的引用类型,它不是一个类本身,但更像是从同一基类Enum扩展的一类类。关键字“枚举”声明的任何类型本身就是不同类。
进行此工作的正确方法是先分别创建您的枚举,例如
enum Day
{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
然后将枚举作为此类参数提供给您的方法:
public static void printTodaysThought(Day theDay)
并像下面这样在switch语句中使用:
switch (theDay)
{
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY: System.out.println("THURSDAY");
break;
case FRIDAY: System.out.println("FRIDAY");
break;
case SATURDAY:
case SUNDAY: System.out.println("SUNDAY");
break;
default: System.out.println("What day is it?");
}
答案 1 :(得分:1)
我认为
java.lang.Enum
是enum
,但不是吗?
不,不是。
“
enum
类型E
的直接超类是Enum<E>
(第8.1.4节)。” 。 JLS 8.9。
但是,这并不使Enum
成为enum
类。
请注意,您不能extend
类Enum
:
*“如果 ClassType 命名类
Enum
或对Enum
的任何调用(第8.9节),则是编译时错误。” * {{3} }。
并且由于Enum
是abstract
,所以除了声明enum
类型之外,您不能直接实例化该类或创建“枚举类”。简而言之,Enum
有点特殊,并且直接使用受到限制。
我希望您在switch
语句中遇到此编译错误。涉及枚举的switch
语句需要特定的enum
类...以及在切换案例中将要使用的特定的一组枚举常量。类Enum<E>
不在声明常量的位置。 (因此从语言的角度来看这是行不通的。)
答案 2 :(得分:0)
enum CarType{
HATCHBACK,SEDAN,SUV
}
要检查基于枚举的
CarType cartype;
switch(cartype){
case HATCHBACK:
dosomethingfor hatchback;
break;
case SEDAN:
dosomethingfor sedan;
break;
case SUV:
dosomethingfor suv;
break;
default:
do something default;
}