Jam*_* Ko 6 java enums switch-statement
假设你有一个包含3个值的枚举:
enum Colors { RED, GREEN, BLUE }
Run Code Online (Sandbox Code Playgroud)
你在某种方法中切换它的所有值,认为你已经处理了所有情况:
switch (colors) {
case RED: ...
case GREEN: ...
case BLUE: ...
}
Run Code Online (Sandbox Code Playgroud)
然后,您在枚举中添加一个新值:
enum Colors { RED, GREEN, BLUE, YELLOW }
Run Code Online (Sandbox Code Playgroud)
除了你在方法中默默地错过一个案例之外,一切仍然编译得很好YELLOW.有没有办法在这种情况下引发编译时错误?
编辑:不明白为什么这被标记为欺骗我可以在Java中添加和删除运行时枚举的元素.由于答案是"否",这意味着应该可以在编译时知道枚举的所有值,因此我要求编译器/某些代码分析工具可以实现, ?
不,但是枚举是课程.所以你可以使用多态:
enum Color {
RED {
@Override
public void foo() { ... }
},
GREEN {
@Override
public void foo() { ... }
},
BLUE {
@Override
public void foo() { ... }
};
public abstract void foo();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果添加颜色,编译器将不允许您添加它,它不会覆盖抽象方法.
而不是
switch (color) {
case RED: ...
case GREEN: ...
case BLUE: ...
}
Run Code Online (Sandbox Code Playgroud)
你可以使用
color.foo();
Run Code Online (Sandbox Code Playgroud)
请注意,如果Kotlin是一个选项,Kotlin可以做你想要的.
另请注意,BLUE是一种颜色,而不是颜色.所以枚举应该命名为Color,而不是Colors.
这取决于编译器.可以将Eclipse IDE内置编译器配置为在这种情况下引发错误.
Windows/Preferences Java编译器错误/警告"enum上的'不完整'开关'情况"可以设置为"错误".
编辑:
甚至还有一个子选项"信号,即使存在'默认'的情况".
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |