我有几个 switch 语句来测试enum
. All enum
值必须在switch
的陈述case
陈述。在代码重构期间,可能会发生以下情况:enum
收缩和增长。当。。。的时候enum
收缩编译器会抛出错误。但如果enum
成长。匹配状态被遗忘并产生运行时错误。我想将此错误从运行时移至编译时。理论上应该可以检测到丢失的enum
编译时的情况。有什么办法可以实现这一点吗?
这个问题已经存在“如何检测新值已添加到枚举中并且未在 switch 中处理”但它不包含答案,仅包含 Eclipse 相关的解决方法。
In 有效的JavaJoshua Bloch 建议创建一个为每个常量实现的抽象方法。例如:
enum Color {
RED { public String getName() {return "Red";} },
GREEN { public String getName() {return "Green";} },
BLUE { public String getName() {return "Blue";} };
public abstract String getName();
}
这将作为一个更安全的开关,强制您在添加新常量时实现该方法。
编辑:为了消除一些混乱,这是使用常规的等效项switch
:
enum Color {
RED, GREEN, BLUE;
public String getName() {
switch(this) {
case RED: return "Red";
case GREEN: return "Green";
case BLUE: return "Blue";
default: return null;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)