[英]Exception in method signature in interface
我有以下界面:
public interface ICalculationRule {
public void calculate(EventBag eventBag);
}
我想提供一些方法来表明计算是否失败, 哪些更正确 ?
throws Exception
方法签名的throws Exception
calculate
方法boolean
( true
=成功, false
- 失败) 这一切都取决于
" 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);
}
}
希望这指导你正确的方向:)
与简单的布尔答案相比,异常具有关注更多信息的优势。 如果您只需要是/否答案 - 返回布尔值,因为它会使代码更简洁,但如果您需要更多细节则抛出异常。
但请确保拥有自己的异常,而不是标准的java.lang.Exception
。 界面总是糟糕和双坏。
您可以尝试抛出一个自定义的Exception,其中包含来自RuntimeException
inherts以获取错误和结果 ,因此接口的客户端不必显式。 这有助于避免不必要的try catch块
您可以尝试发送一个可以捕获成功和失败的Result对象,而不是布尔响应,获得一个容器来在调用者和被调用者之间传递信息
一般来说,我们不建议使用异常来处理逻辑过程。 应将异常视为真正的异常,并且仅在必须时才发生。 抛出一个异常,它绝对花费更多的时间而不仅仅是简单地返回一个值,而且,我相信正确标记一个有意义的返回值将对代码阅读器和未来的采用者更有意义。 但是,这是不可避免的,如果某个地方通过返回值指示了强大的处理,则可以使用throw异常。
对于您的情况,以下选项应该是正确的选择。
make calculate method boolean (true=success, false - failure)
重要的是要理解声明Exception
可能会被抛出,表明它必须由客户端代码处理。 这意味着, 作为该方法的作者 ,您不能让它通过。
另一方面,如果计算失败不是那么严重,可能是客户端代码的问题,也可能不是,您可以按照您的说明返回boolean
,让客户端代码决定是否应该应用特殊处理。 如果您认为客户端需要的信息不仅仅是boolean
您总是可以返回某种CalculationResult
对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.