首先,我强烈认为,已检查与未经检查的例外的条款是不准确的,因为它描述性地误导了正在进行检查的人或检查是否是自愿的。因此,我会在这个问题中使用以下术语,以便不了解差异的人可能会回答:
问题的动机:
我觉得标准Java实用程序的编写者已经对异常进行了误导和不适当的过度依赖。我特别关注的实用程序是Integer.parseint(String)实用程序方法。
问题:
如果我要重写该实用程序,以满足我对实用程序编写者过度使用异常的烦恼,那么解决这种困境的最佳方法是什么?这将对待不可接受的字符串,但满足我的意识形态反对过度使用例外。
我解决问题的直接思路是
由于Java语言中代表人员的缺席使得Java变得虚弱/贫困,我会将其视为
其中
public interface CallBack<T,S> {
T mitigate(S value);
}
但是,我怀疑我的快速和肮脏的解决方案是避免使用异常的最佳方法。我可以使用哪些替代算法来解决我对过度依赖异常的意识形态分歧?在我开始编写这样的实用程序库之前。
答案 0 :(得分:5)
你正在寻找的是 Maybe monad,它是作为Java 8中的Optional
接口实现的。这是一种经过实践证明的方法,如果可能的话,它有助于组合功能。构成链中任何地方的“例外”。
上述一点需要注意的是,完整的API必须支持 Maybe monad才能真正发挥作用。
答案 1 :(得分:2)
检查异常是由于程序员无法触及的情况而发生的异常。一个完美的例子,向您展示它们的有用性,是通过网络提出请求。在C#中(其中不存在已检查的异常),当您使用HttpClient.Get
发出请求时,它现在可能正常工作,但两分钟后再次使用它可能会出现UNEXPECTED网络错误而且您无能为力做到这一点。因此,如果您是一名优秀的程序员,您应始终准备好通过使用catch
打包来处理这些意外的网络错误。 Java不会强制执行此操作,Java会强迫您成为负责任的程序员。
对于Integer.parseInt
,这不应该强迫您catch
错误,因为可能发生的任何错误都不是意外的。您只需查看正在通过的string
即可查看通话是否会中断。如果我作为一名程序员,知道我将永远传递一个有效的string
,我是否真的应该在那里放一个catch
我知道永远不会被使用?