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

lev*_*ver 7 java oop getter setter 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() {
    ...
}   
Run Code Online (Sandbox Code Playgroud)

我不记得一个setter如上所述抛出异常的情况.但我很好奇它是好还是坏.

Nic*_*tto 6

最好的方法是让你的对象不可变,摆脱你的 setter 并在构造函数中抛出你的异常,否则无论你选择哪种方式,如果发生错误,你的对象处于不一致状态的风险很高,这将导致很难找到错误。为了更好地理解,请阅读本文,特别是与Failure Atomicity.