我有几个switch语句测试一个enum.enum必须通过switch语句在语句中处理所有值case.在代码重构期间,可能会发生enum收缩和增长.当enum收缩时,编译器会抛出错误.但是,如果enum增长,则不会抛出任何错误.匹配状态被遗忘并产生运行时错误.我想将此错误从运行时移动到编译时.从理论上讲,应该可以enum在编译时检测丢失的情况.有没有办法实现这个目标?
问题已经存在" 如何检测新值已添加到枚举中并且未在交换机中处理 "但它不包含仅与Eclipse相关的解决方案的答案.
假设你有一个包含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中添加和删除运行时枚举的元素.由于答案是"否",这意味着应该可以在编译时知道枚举的所有值,因此我要求编译器/某些代码分析工具可以实现, ?