Pop*_*oko 239 java enums switch-statement
首先,我将说明我对C#中的枚举更加熟悉,看起来java中的枚举非常混乱.
正如您所看到的,我正在尝试在下一个示例中使用switch语句@enums,但无论我在做什么,我总是会收到错误.
我收到的错误是:
SomeClass.AnotherClass.MyEnum.VALUE_A
必须使用不合格的枚举常量替换合格的案例标签VALUE_A
事情是我非常理解错误,但我不能只编写VALUE_A,因为枚举位于另一个子类中.有没有办法解决这个问题?为什么它会在Java中发生?
//Main Class
public class SomeClass {
//Sub-Class
public static class AnotherClass {
public enum MyEnum {
VALUE_A, VALUE_B
}
public MyEnum myEnum;
}
public void someMethod() {
MyEnum enumExample //...
switch (enumExample) {
case AnotherClass.MyEnum.VALUE_A: { <-- error on this line
//..
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
dar*_*man 524
把它改成这个:
switch (enumExample) {
case VALUE_A: {
//..
break;
}
}
Run Code Online (Sandbox Code Playgroud)
线索出现错误.您不需要case
使用枚举类型限定标签,只需使用其值.
Kru*_*Kru 31
Java自动推断元素的类型case
,因此标签必须是不合格的.
int i;
switch(i) {
case 5: // <- integer is expected
}
MyEnum e;
switch (e) {
case VALUE_A: // <- an element of the enumeration is expected
}
Run Code Online (Sandbox Code Playgroud)
Aka*_*ppa 24
错误的:
case AnotherClass.MyEnum.VALUE_A
Run Code Online (Sandbox Code Playgroud)
对:
case VALUE_A:
Run Code Online (Sandbox Code Playgroud)
从Java 14开始,可以使用 switch 表达式。
对于这篇文章
public enum MyEnum {
VALUE_A, VALUE_B;
}
Run Code Online (Sandbox Code Playgroud)
public void someMethod() {
MyEnum enumExample //...
switch (enumExample) {
case VALUE_A -> {
// logic
}
case VALUE_B -> {
// logic
}
}
}
Run Code Online (Sandbox Code Playgroud)
开关表达式
与所有表达式一样,switch 表达式的计算结果为单个值,并且可以在语句中使用。它们可能包含“case L ->”标签,无需使用break语句来防止失败。您可以使用yield 语句来指定switch 表达式的值。
public enum Month {
JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC;
}
Run Code Online (Sandbox Code Playgroud)
示例1:返回值。
public static int getNoOfDaysInAMonth(Month month, boolean isLeapYear) {
return switch(month) {
case APR, JUN, SEP, NOV -> 30;
case FEB -> (isLeapYear)? 29: 28;
case JAN, MAR, MAY, JUL, AUG, OCT, DEC -> 31;
};
}
Run Code Online (Sandbox Code Playgroud)
示例 2:不返回值。
public static void printNoOfDaysInAMonth(Month month, boolean isLeapYear) {
switch(month) {
case APR, JUN, SEP, NOV -> {
System.out.println("30 days");
}
case FEB -> {
System.out.println(((isLeapYear)? 29: 28) + " days");
}
case JAN, MAR, MAY, JUL, AUG, OCT, DEC -> {
System.out.println("31 days");
}
};
}
Run Code Online (Sandbox Code Playgroud)
参考
小智 5
这应该做:
//Main Class
public class SomeClass {
//Sub-Class
public static class AnotherClass {
public enum MyEnum {
VALUE_A, VALUE_B
}
public MyEnum myEnum;
}
public void someMethod() {
AnotherClass.MyEnum enumExample = AnotherClass.MyEnum.VALUE_A; //...
switch (enumExample) {
case VALUE_A: { //<-- error on this line
//..
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
108097 次 |
最近记录: |