2013-02-14 36 views
1

这是更好的实践问题。我希望可以在这里提出这个问题。我正在创建一个将被用作我们API的一部分的接口。我有一个名为getSomeObject()的方法,它在后台具有复合逻辑,并返回SomeObject。我在幕后调用了引发IllegalArgumentException的方法,所以有可能我的getSomeObject()方法可能会抛出此异常。我遇到的问题是API的用户不熟悉API的内部工作原理,不理解抛出异常的原因。由于参数是在我的方法内部创建的,用户甚至不知道这个参数存在。我试图记录它,但是这个异常的原因会让API的用户感到困惑。所以我的问题是,这样的情况最好的办法是什么?什么是记录此异常的正确方法?记录由未知参数引起的异常的最佳实践

+0

将它包装在你自己的例外,解释它发生的原因。 – millimoose 2013-02-14 16:42:34

+0

我的建议是在getSomeObject()方法中捕获IllegalArgumentException异常,并抛出一个特定于api的异常。 – Davz 2013-02-14 16:43:35

回答

7

从不接受任何参数的方法抛出IllegalArgumentException确实很混乱。

我想你会得到这个异常,如果getSomeObject之外的东西没有正确定义。所以,你也许可以抛出一个IllegalStateException,并将其与你的Javadoc的说明资料:当你说有你的内部代码抛出抛出:IllegalArgumentException可能性

@throws IllegalStateException If member variable xyz is not initialised. 
           This can happen if method `init()` has not been 
           called before `getSomeObject`. 
+0

感谢您的回复assylias。如果用户不知道方法init(),该怎么办? – robonerd 2013-02-14 16:57:13

+0

@robonerd最终,用户需要能够正确使用您的API。所以我猜想只有三种可能:(i)用户可以采取额外的步骤来避免IllegalArgumentException,并且需要记录这些额外的步骤(ii)您的代码需要做某些事情来避免该异常,并且应该这样做或者)在运行时,会发生一些让您的API无法使用的情况,您应该抛出一个适当的异常(可能会检查),让API用户知道某些事情真的发生了错误(例如,数据库访问不可用)。 – assylias 2013-02-14 17:01:18

+0

我的答案与案例(i)或(iii)有关。 – assylias 2013-02-14 17:02:54

1

,你怎么处理呢?
是否由用户错误输入引起的?
如果不是,那么你应该抓住它并处理它,如果仍然必须抛出它,它必须被翻译成用户可以理解的例外
或者是这种情况发生的可能性并且纯粹是理论性的吗?
如果这是一个有效的异常情况,用户应该处理您应该抛出一个适当的检查异常,并在您的界面声明