对于建议抛出异常的人:
抛出异常并不会给我编译时错误,它会给我运行时错误。我知道我可以抛出异常,但我宁愿在编译时死亡而不是在运行时。
首先,我正在使用Eclipse 3.4。
我有一个数据模型,其中包含一个模式属性,该属性是枚举类型。
enum Mode {on(...), off(...), standby(...); ...}
我目前正在编写这个模型的一个视图,已经有了代码
...
switch(model.getMode()) {
case on:
return getOnColor();
case off:
return getOffColor();
case standby:
return getStandbyColor();
}
...
由于函数结尾没有默认情况和返回值,我收到了一个错误“此方法必须返回java.awt.Color类型的结果”。但是,我想在将来枚举类型添加了其他类型时(例如shuttingdown),编译器能够给出编译错误,所以我不想添加一个默认的情况并抛出AssertionError,因为这会在修改Mode并直到运行时才能看到错误。我的问题是:为什么EclipseBuilder(和javac)不能识别此switch语句涵盖所有可能性并停止警告我需要返回类型(或者它是否覆盖它们?)。有没有办法在不添加Mode方法的情况下实现我的预期效果?如果不行,那么有没有选项可以警告/错误未覆盖枚举所有可能值的switch语句?
编辑:Rob: 这是一个编译错误。我刚试着用javac编译它,我得到了一个“缺少返回语句”的错误,它指向方法中的最后一个}。Eclipse只是在方法的顶部放置了该错误。