相关疑难解决方法(0)

Java枚举和切换语句 - 默认情况?

对于建议抛出异常的人:
抛出异常不会给我一个编译时错误,它会给我一个运行时错误.我知道我可以抛出一个异常,我宁愿在编译期间死也不会在运行时死掉.

首先,我使用的是eclipse 3.4.

我有一个数据模型,其模式属性是枚举.

enum Mode {on(...), off(...), standby(...); ...}
Run Code Online (Sandbox Code Playgroud)

我目前正在写这个模型的视图,我有代码

...
switch(model.getMode()) {
case on:
   return getOnColor();
case off:
   return getOffColor();
case standby:
   return getStandbyColor();
}
...
Run Code Online (Sandbox Code Playgroud)

我收到错误"此方法必须返回类型java.awt.Color的结果",因为我没有默认情况,并且在函数末尾没有返回xxx. 在有人为枚举添加另一种类型的情况下出现编译错误(例如关闭)所以我不想放置抛出AssertionError的默认情况,因为这将使用修改后的模式进行编译而不会被视为错误直到运行时.

我的问题是:
为什么EclipseBuilder(和javac)没有意识到这个开关涵盖了所有可能性(或者它是否涵盖了它们?)并且停止警告我需要返回类型.有没有办法,我可以做我想要的,而无需向Mode添加方法?

如果失败了,是否有一个选项可以在不包含所有Enum可能值的switch语句上发出警告/错误?

编辑:Rob:这是一个编译错误.我只是尝试用javac编译它,我得到一个"缺少返回语句"错误,目标是方法的最后一个}.Eclispe只是将错误放在方法的顶部.

java enums

56
推荐指数
4
解决办法
4万
查看次数

如何在编译时确保枚举开关的完整性?

我有几个switch语句测试一个enum.enum必须通过switch语句在语句中处理所有值case.在代码重构期间,可能会发生enum收缩和增长.当enum收缩时,编译器会抛出错误.但是,如果enum增长,则不会抛出任何错误.匹配状态被遗忘并产生运行时错误.我想将此错误从运行时移动到编译时.从理论上讲,应该可以enum在编译时检测丢失的情况.有没有办法实现这个目标?

问题已经存在" 如何检测新值已添加到枚举中并且未在交换机中处理 "但它不包含仅与Eclipse相关的解决方案的答案.

java

38
推荐指数
4
解决办法
7564
查看次数

强制彻底切换

是否有注释或其他方法将非详尽的switch语句警告转换为错误?如果没有在开关中正确处理所有值,我想要某个方法或类产生错误.

例:

public enum E {
  A,
  B
}
Run Code Online (Sandbox Code Playgroud)

在代码的其他地方,有一个像这样的枚举的开关

switch (enumValue) {
case A: /* do something */ break;
}
Run Code Online (Sandbox Code Playgroud)

Java会向您发出警告,指示此开关不处理所有枚举值.我想将此警告变为错误(永久,无论各个IDE设置如何).

请记住,在这种情况下我无法更改原始文件enum,所以我希望编译器强制执行它.

java enums

7
推荐指数
3
解决办法
2653
查看次数

标签 统计

java ×3

enums ×2