vol*_*lni 17 java error-handling
我将解释输入错误检查的含义.
假设你有一个功能doSomething(x).
如果函数成功doSomething完成某事并且什么都不返回.但是,如果有错误,我希望收到通知.这就是错误检查的意思.
一般来说,我一直在寻找检查错误的最佳方法.我想到了以下解决方案,每个解决方案都存在潜在问题.
标记错误检查.如果doSomething(x)完成成功返回null.否则,它返回一个布尔值或错误字符串.问题:副作用.
抛出异常.doSomething(x)遇到错误时抛出异常.问题:如果您仅对参数执行错误检查,则抛出IllegalArgumentException似乎不合适.
在函数调用之前验证输入.如果错误检查仅用于函数的参数,则可以在调用函数之前调用验证器doSomething(x)函数.问题:如果类的客户端在调用之前忘记调用验证器函数doSomething(x)怎么办?
我经常遇到这个问题,并且非常感谢任何帮助或正确方向上的一点.
抛出异常是最好的方法.
如果仅对参数执行错误检查,则抛出IllegalArgumentException似乎不合适.
为什么?这就是这个例外的目的.
- 标记错误检查
在某些情况下,这是合适的,具体取决于"错误"的含义.
来自API的一个示例:如果您尝试将对象添加到a Set,该对象已经包含equals新对象的另一个对象,则该add方法将"失败"并通过返回来指示此对象false.(请注意,我们处于技术上甚至不是"错误"的水平!)
2. 抛出异常
这是默认选项.
问题是,如果你去检查异常(你需要throws声明或try/ catch子句)或未经检查的异常(扩展的异常RuntimeException).这里有一些拇指规则.
未经检查的异常:表示程序中的缺陷(错误) - 通常将无效参数传递给非私有方法.
已检查的异常:代表程序直接控制范围之外的区域中的无效条件(无效的用户输入,数据库问题,网络中断,缺少文件)
请注意,这IllegalArgumentException是一个未经检查的异常,非常适合在参数不符合时抛出.
如果你想抛出一个已检查的异常,你可以通过扩展来推动自己的Exception异常,B)使用一些现有的已检查异常或C)"链"一个运行时异常,例如IOException:throw new IOException(new IllegalArgumentException("reason goes here..."));
3. 在函数调用之前验证输入
依赖于客户应该在通话之前清理/检查他的论点这一事实对我来说似乎是一个坏主意.
| 归档时间: |
|
| 查看次数: |
8776 次 |
| 最近记录: |