避免检查异常

Ble*_*eek 3 java exception

首先,我强烈认为,检查的条款与未检查的例外情况是不准确的,因为它描述性地误导了谁在进行检查或检查是否是自愿的.因此,我会在这个问题中使用以下术语,以便不了解差异的人可能会回答:

  • 检查强制异常=已检查异常
  • Check-not-mandated exception =未经检查的异常

问题的动机:
我觉得标准Java实用程序的编写者已经犯了误导和不恰当的过度依赖异常.我特别关注的实用程序是Integer.parseint(String)实用程序方法.

  1. 它不应该使用check-not-mandated异常,因为使用util的每个人都知道提供的字符串通常是未知的,因此,我们无论如何都会强制尝试try.因此,这不是一个不可救助的情况.
  2. 如果该实用程序的编写者强制使用了检查强制异常,那么它仍然是不合适的,因为因为您知道异常的可能性很高,所以不要将其作为例外.因为通过逻辑推理,你所期望发生的事情不能在语言上被称为"例外".
  3. 保留对实际关键问题使用任何例外.

问题:
如果我要重写该实用程序,为了满足我对实用程序编写者过度使用异常的烦恼,解决这种困境的最佳方法是什么?这将对待不可接受的字符串,但满足我的意识形态反对过度使用例外.

我解决这个问题的直接思路是

  • 整数解析(String,Delegate)

由于Java语言中代表人员的缺席使得Java变得虚弱/贫困,我会这样做

  • 整数解析(String value,CallBack unacceptedParseCallback);

哪里

public interface CallBack<T,S> {
  T mitigate(S value);
}
Run Code Online (Sandbox Code Playgroud)
  • 回调可以为null,但只有在需要回调缓冲但未提供的情况下才会抛出NumberFormatException.

但是,我怀疑我的快速和肮脏的解决方案是避免使用异常的最佳方法.我可以使用哪些替代算法来解决我对过度依赖异常的意识形态分歧?在我开始编写这样的实用程序库之前.

Mar*_*nik 5

你正在寻找的是Maybe monad,Optional它是作为Java 8中的接口实现的.这是一种经过实践验证的方法,如果在组合链中的任何地方可能出现"异常",它将促进面部功能的组合.

上面提到的一个警告是,完整的API必须支持Maybe monad才能真正有用.