【发布时间】:2011-08-07 04:42:09
【问题描述】:
在 Java 中,给定一对公共方法 enableFoo 和 disableFoo,它们分别将名为 isEnabledFoo 的布尔字段设置为 true 或 false,该方法是否应该在设置之前检查 Foo 是否已启用?如果是,是否应该抛出异常?如果是,应该勾选还是不勾选?如果未选中,它应该抛出什么?非法状态异常?
一个转折:虽然当前的实现只是设置了一个布尔字段,但我故意不将它实现为一个带有布尔参数的 setFoo“setter”方法,因为以后可能会更改实现以包含副作用(甚至可能不完全设置一个字段)。将其保留为 enableFoo/disableFoo 似乎是保证封装的最佳方式。
我应该这样做吗:
public void enableFoo() throws myCheckedException
{
if (! this.isEnabledFoo)
{
this.isEnabledFoo = true;
}
// Is this overkill?
else
{
// Foo is already enabled...Should a checked exception be thrown?
throw new myCheckedException ("Foo is already enabled.");
// What about an unchecked exception?
// throw new IllegalStateException ("Foo is already enabled.");
}
}
或者只是这样:
public void enableFoo()
{
// I guess we don't care if foo is already enabled...
this.isEnabledFoo = true;
}
甚至:
public void enableFoo()
{
// Is this just code bloat?
if (! this.isEnabledFoo)
{
this.isEnabledFoo = true;
}
}
我认为虽然最后两个版本更简单,但它们会隐藏一个可能的错误,即开发人员在调用 enableFoo 时认为它已被禁用,而实际上它已经被启用(但这真的很重要吗?)。这里最好的设计是什么?
【问题讨论】:
标签: java exception methods boolean state