更具体地说,如果给定值为负,我想编写一个抛出IllegalArgumentException
的代码。我应该在setter / constructor中包含此代码,还是应该在调用适当的方法时检查该值? (例如:start()
,init()
,print()
或run()
。无论如何。)
我的代码(简化):
public class LLUAlgorithm {
private int temperature;
public int getTemperature() {
return temperature;
}
public void setTemperature(int temperature) {
if (temperature < 0)
throw new IllegalArgumentException("can't be smaller than 0.")
this.temperature = temperature;
}
public void run() {
...
}
我不记得一个例子,一个setter抛出异常,如上所述。但我很好奇它是好还是坏。
答案 0 :(得分:4)
最好的方法是让你的对象不可变,摆脱你的setter并在构造函数中抛出你的异常,否则无论你选择哪种方式,如果出现错误,你都有很高的风险使您的对象处于不一致的状态,这将导致难以找到的bug。为了更好地理解,请阅读this,尤其是与Failure Atomicity
相关的部分。