我有几个测试一个的switch语句enum。所有enum值必须在switch语句中由case语句处理。在代码重构期间,可能会发生enum收缩和增长。当enum收缩时,编译器将引发错误。但是,如果enum增长,则不会引发任何错误。匹配状态被遗忘并产生运行时错误。我想将此错误从运行时移到编译时。从理论上讲,应该可以enum在编译时检测到丢失的情况。有什么办法可以做到这一点?
enum
switch
case
另一种解决方案使用功能方法。您只需要根据下一个模板声明枚举类:
public enum Direction { UNKNOWN, FORWARD, BACKWARD; public interface SwitchResult { public void UNKNOWN(); public void FORWARD(); public void BACKWARD(); } public void switchValue(SwitchResult result) { switch (this) { case UNKNOWN: result.UNKNOWN(); break; case FORWARD: result.FORWARD(); break; case BACKWARD: result.BACKWARD(); break; } } }
如果尝试至少在没有一个枚举常量的情况下使用此函数,则会出现编译错误:
getDirection().switchValue(new Direction.SwitchResult() { public void UNKNOWN() { /* */ } public void FORWARD() { /* */ } // public void BACKWARD() { /* */ } // <- Compilation error if missing });