【发布时间】:2016-05-07 19:00:24
【问题描述】:
更具体地说,我想编写一个代码,如果给定值为负,则抛出 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 像上面那样抛出异常的情况。但我很好奇它是好还是坏。
【问题讨论】:
-
嗯,异常名称包含非法参数,所以当然你可以抛出它,当参数非法时,比如一个负数。是的,这可能发生在二传手中,我从来没有听说过,这是不好的做法(因为它不是)。
-
是的,没关系,你甚至可以尝试更具体的例外...如果为空,如果是无效索引或定义自定义异常
-
你应该抛出 IllegalArgumentException。您可以使用构建器模式过度使用它。你读过“Effective Java”这本书吗,里面有关于构建器模式的资料。
-
是的,在setter中抛出异常。如果您的代码在稍后的某个时间点抛出
IllegalArgumentException,那么调用者会感到困惑。来自the docs:Thrown to indicate that a method has been passed an illegal or inappropriate argument. -
我认为将异常放入设置器中是很好的,这样无论模型使用了多少次,模型本身都能够谈论错误。每次使用它时也会减少异常处理量。此外,如果您可以考虑公开 API,那听起来也足以在 setter 中放置异常
标签: java oop setter getter getter-setter