这是更好的实践问题。我希望可以在这里提出这个问题。我正在创建一个将被用作我们API的一部分的接口。我有一个名为getSomeObject()
的方法,它在后台具有复合逻辑,并返回SomeObject
。我在幕后调用了引发IllegalArgumentException
的方法,所以有可能我的getSomeObject()
方法可能会抛出此异常。我遇到的问题是API的用户不熟悉API的内部工作原理,不理解抛出异常的原因。由于参数是在我的方法内部创建的,用户甚至不知道这个参数存在。我试图记录它,但是这个异常的原因会让API的用户感到困惑。所以我的问题是,这样的情况最好的办法是什么?什么是记录此异常的正确方法?记录由未知参数引起的异常的最佳实践
回答
从不接受任何参数的方法抛出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`.
感谢您的回复assylias。如果用户不知道方法init(),该怎么办? – robonerd 2013-02-14 16:57:13
@robonerd最终,用户需要能够正确使用您的API。所以我猜想只有三种可能:(i)用户可以采取额外的步骤来避免IllegalArgumentException,并且需要记录这些额外的步骤(ii)您的代码需要做某些事情来避免该异常,并且应该这样做或者)在运行时,会发生一些让您的API无法使用的情况,您应该抛出一个适当的异常(可能会检查),让API用户知道某些事情真的发生了错误(例如,数据库访问不可用)。 – assylias 2013-02-14 17:01:18
我的答案与案例(i)或(iii)有关。 – assylias 2013-02-14 17:02:54
,你怎么处理呢?
是否由用户错误输入引起的?
如果不是,那么你应该抓住它并处理它,如果仍然必须抛出它,它必须被翻译成用户可以理解的例外
或者是这种情况发生的可能性并且纯粹是理论性的吗?
如果这是一个有效的异常情况,用户应该处理您应该抛出一个适当的检查异常,并在您的界面声明
- 1. 异常记录器:最佳实践
- 2. GWT服务异常日志记录的最佳实践
- 3. 记录ASP.NET - 最佳实践
- 4. 处理异常的最佳实践
- 5. 异常处理的最佳实践
- 6. (错误)记录的最佳实践
- 7. 服务结构未处理的异常和最佳实践
- 8. Python异常处理 - 最佳实践
- 9. 处理PyMySql异常 - 最佳实践
- 10. 异常处理最佳实践
- 11. 显示单个记录 - 最佳实践
- 12. 最佳实践 - 存储过程记录
- 13. SQL常数值的最佳实践
- 14. 将实时数据记录到NoSQL DB中的最佳实践
- 15. Codeigniter路由最佳实践
- 16. JavaScript函数参考的最佳实践
- 17. 指示Func/Proc引发异常(如Java)。最佳实践?
- 18. 异步Webrequest最佳实践
- 19. Node.js的最佳实践异常处理 - 在异步/等待
- 20. Prolog最佳实践参考?
- 21. 函数参数最佳实践
- 22. 在实用程序类中抛出异常的最佳实践
- 23. 由空命令参数引起的空引用异常?
- 24. Facebook登录最佳实践
- 25. MVC路由的最佳实践
- 26. UIKeyboard通知的最佳实践 - iPhone SDK
- 27. 在C++/CLI中实现常量引用的最佳实践
- 28. MySQL的:最佳实践来获得最后一个记录
- 29. Laravel异步请求的最佳实践
- 30. 最佳实践:数据库引用表
将它包装在你自己的例外,解释它发生的原因。 – millimoose 2013-02-14 16:42:34
我的建议是在getSomeObject()方法中捕获IllegalArgumentException异常,并抛出一个特定于api的异常。 – Davz 2013-02-14 16:43:35