对于建议抛出异常的人:
抛出异常不会给我带来编译时错误,它会给我带来运行时错误。我知道我可以抛出异常,我宁愿在编译期间死掉,也不愿在运行时死掉。
首先,我使用的是eclipse 3.4。
我有一个数据模型,它的mode属性是一个Enum。
enum Mode {on(...), off(...), standby(...); ...}
我目前正在编写这个模型的视图,我有代码
...
switch(model.getMode()) {
case on:
return getOnColor();
case off:
return getOffColor();
case standby:
return getStandbyColor();
}
...
我得到了一个错误“这个方法必须返回一个java.awt.Color类型的结果”,因为我没有默认的情况,并且在函数的末尾没有返回xxx。I want 如果有人向枚举中添加了另一个类型(例如shuttingdown),则会出现编译错误,因此我不想设置抛出AssertionError的默认情况,因为这将以修改模式进行编译,直到运行时才会被视为错误。
我的问题是:
为什么EclipseBuilder (和javac)没有意识到这个开关涵盖了所有可能性(或者它涵盖了所有可能性?)不要再警告我需要一个返回类型。有没有办法在不向Mode添加方法的情况下做我想做的事情?
如果做不到这一点,是否可以对没有涵盖Enum所有可能值的switch语句进行警告/错误?
编辑: Rob:这是一个编译错误。我刚刚尝试用javac编译它,但我得到了一个针对该方法的最后一个}的“缺少返回语句”错误。Eclispe只是将错误放在方法的顶部。
https://stackoverflow.com/questions/859563
复制相似问题