在Java中的setter中抛出Exception是一个好习惯吗?

时间:2016-05-07 19:00:25

标签: java oop setter getter getter-setter

更具体地说,如果给定值为负,我想编写一个抛出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抛出异常,如上所述。但我很好奇它是好还是坏。

1 个答案:

答案 0 :(得分:4)

最好的方法是让你的对象不可变,摆脱你的setter并在构造函数中抛出你的异常,否则无论你选择哪种方式,如果出现错误,你都有很高的风险使您的对象处于不一致的状态,这将导致难以找到的bug。为了更好地理解,请阅读this,尤其是与Failure Atomicity相关的部分。