我有几个switch语句测试枚举
。所有<code>enumenum可能会收缩和增长。当<code>枚举
已经存在“如何检测新值已添加到枚举中并且未在开关中处理”的问题,但它不包含答案,而只是与Eclipse相关的工作。
我不知道标准的Java编译器,但Eclipse编译器当然可以配置为对此发出警告。转到窗口-
另一种解决方案使用函数式方法。您只需要根据下一个模板声明枚举类:
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
});
在有效Java中,Joshua 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();
}
这将作为一个更安全的开关,如果您添加一个新常量,则强制您实现该方法。
编辑:为了澄清一些混淆,以下是使用常规开关
的等效项:
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;
}
}
}
问题内容: 我有几个测试一个的switch语句。所有值必须在语句中由语句处理。在代码重构期间,可能会发生收缩和增长。当收缩时,编译器将引发错误。但是,如果增长,则不会引发任何错误。匹配状态被遗忘并产生运行时错误。我想将此错误从运行时移到编译时。从理论上讲,应该可以在编译时检测到丢失的情况。有什么办法可以做到这一点? 问题答案: 另一种解决方案使用功能方法。您只需要根据下一个模板声明枚举类: 如果尝
问题内容: 我刚刚开始学习数据库设计,并且我正在与Oracle 11G和SQL Developer一起工作。 我对数据库有以下3条业务规则: 每个官员必须注册一个并且只能注册一个保险公司。每个保险公司可以注册一名或多名官员 每个保险公司必须提供至少五种不同类型的保险类型。每种保险类型最多可以由4个保险公司提供,或者根本不提供 每个保险类型可以由一个或多个官员来订阅。每个官员最多可以订阅同一家公司提
我正在Java Spring/Hibernate中使用Swagger-UI。Swagger UI版本是2。 我很难使用枚举。
我想在Java中创建一个开关/大小写语句,并确保所有字符串都在语句中。 然而,在Java中使用简单的字符串(即北、南、东、西)创建枚举很容易。 对于带点和空格的字符串会怎么做?即“这是描述”,“com.stackoverflow.ClassName”
我有一个注释要求是编译时常量。我从下面的中获取: 我的s如下: 当我使用注解Kotlin需要是编译时常量。 注释实现本身: 我仔细研究了类似的问题,但没有找到解决方法。我还找到了一篇与这个主题相关的文章,但到目前为止没有任何效果。 附带说明:我不能更改注释,因为它来自库,我也不能更改库。 总而言之,有没有办法从静态编程语言中的编译时常量到注释中使用?
问题内容: 例如,我该怎么做: 结果示例: 问题答案: 迅捷4.2+ 从Swift 4.2(使用Xcode 10)开始,只需添加协议一致性即可从中受益。要添加此协议一致性,您只需要在某处写: 如果枚举是您自己的,则可以直接在声明中指定一致性: 然后,以下代码将打印所有可能的值: 与早期Swift版本(3.x和4.x)的兼容性 如果您需要支持Swift 3.x或4.0,则可以通过添加以下代码来模仿S