我有以下界面:
public interface ICalculationRule {
public void calculate(EventBag eventBag);
}
我想提供一些方法来说明计算是否失败,哪些更正确?
throws Exception
添加到方法签名calculate
方法boolean
(true
=成功,false
- 失败)答案 0 :(得分:2)
一切都取决于
" Is the error is expected or unexpected ? "
如果在计算过程中出现意外情况。假设抛出异常。 如果它应该在使用中处理try catch并且如果你的方法的调用者想要对此作出反应。然后添加抛出异常。
如果结果否是预期会发生的事情 如果错误条件不具有那么重要,并且调用者只是想知道成功或失败的结果。去吧。
也不要去寻找通用异常但要具体。
此外,我可以考虑让代表通知来电者成功或失败。
public interface Response {
public void onSuccess();
public void onFailure(Exception exception);
}
我可以通过调用者和计算方法调用来查找它的实现对象。 成功或失败可以调用相应的代表,如
public void calculation(Response response) {
Exception e = null;
try {
// Do something here
} catch (IOException ioe) {
e = ioe;
}
if(e == null) {
response.onSuccess();
} else {
response.onFailure(e);
}
}
希望这能指导你正确的方向:)
答案 1 :(得分:1)
异常具有关注更多信息的优势,而不仅仅是简单的布尔答案。如果您只需要是/否答案 - 返回布尔值,因为它会使代码更简洁,但如果您需要更多细节则抛出异常。
但请确保您拥有自己的例外,而不是标准java.lang.Exception
。它在界面上总是很糟糕,也是双坏的。
答案 2 :(得分:0)
您可以尝试抛出一个自定义的异常,其中包含来自RuntimeException
的inherts的错误和结果,因此接口的客户端不必显式。这有助于避免不必要的try catch块
您可以尝试发送一个可以捕获成功和失败的Result对象,而不是布尔响应,获得一个容器来在调用者和被调用者之间传递信息
答案 3 :(得分:0)
一般来说,我们不建议使用异常来处理逻辑过程。应将异常视为真正的异常,并且仅在必须时才发生。抛出一个异常,它绝对花费更多的时间而不仅仅是简单地返回一个值,而且,我相信正确标记一个有意义的返回值将对代码阅读器和未来的采用者更有意义。但是,这是不可避免的,如果某个地方通过返回值指示了强大的处理,则可以使用throw异常。
对于您的情况,以下选项应该是正确的选择。
make calculate method boolean (true=success, false - failure)
答案 4 :(得分:-1)
了解声明Exception
可能会被抛出,表明客户端代码处理 非常重要。这意味着,作为方法的作者,不能让它通过。
另一方面,如果计算失败不是那么严重,可能是客户端代码的问题,也可能不是,你可以按照你的说法返回boolean
,让客户代码决定是否应该采取特殊待遇。如果您认为客户需要的信息不仅仅是boolean
,那么您总是可以返回某种CalculationResult
对象。