我有一个方法只能在对象的生命周期内调用一次。为了确保这种情况,该方法将对象中的布尔标志设置为app.config
,以便稍后检查此方法是否已经运行。如果在单个对象的生命周期内第二次调用此方法,我目前正在抛出true
(带有描述性消息),但这对我来说并不合适,因为问题实际上并不是参数本身。是否有比IllegalArgumentException
更好的例外使用?
在这种情况下我选择不使用IllegalArgumentException
语句,因为类和方法都在包外可见,所以问题可能是由我的包外部的代码引起的。这是正确的想法吗?
答案 0 :(得分:4)
但是因为异常不应该是普通控制流的一部分,所以你应该添加一个伴随方法,它返回一个布尔值,指示下一次调用该方法是否成功。
此类伴随方法的示例是Iterator#hasNext()。
设计良好的API不得强制其客户端使用例外 普通控制流程。具有“状态依赖”方法的类 只有在某些不可预测的条件下才能调用 通常有一个单独的“状态测试”方法,表明它是否 适合调用依赖于状态的方法。例如, Iterator接口接下来是依赖于状态的方法 相应的状态测试方法hasNext。 1
1:来自Effective Java,第9章:例外
答案 1 :(得分:1)
除了特定的异常类型之外,你应该担心的是你在这里创建了一个糟糕的设计。
良好的界面使得做正确的事情变得容易,并且很难做错事。
含义:您当前的实现可以很容易地调用该方法两次;现在,您现在强制客户始终检查是否已调用该方法。
所以,不要把时间花在例外类型上:退一步说明如何将一个类分解为两个类。并找到一个很好的,以便调用该特定方法为您提供一个不同的对象。或者检查是否应该使用状态机来解决此问题。