避免检查异常

时间:2014-01-24 14:22:32

标签: java exception

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

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

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

  1. 它不应该使用 check-not-mandated 异常,因为使用过该util的每个人都知道所提供的字符串通常是未知的,因此,无论如何我们都会强制尝试一个try块。因此,这不是一种不可救助的情况。
  2. 如果该实用程序的编写者强制使用 check-mandated exception ,那么它仍然是不合适的,因为你知道异常的可能性很高,那么就不要这样做一个例外。因为通过逻辑推理,你所期望发生的事情不能在语言上被称为“例外”。
  3. 保留对实际关键问题使用任何例外情况。
  4. 问题
    如果我要重写该实用程序,以满足我对实用程序编写者过度使用异常的烦恼,那么解决这种困境的最佳方法是什么?这将对待不可接受的字符串,但满足我的意识形态反对过度使用例外。

    我解决问题的直接思路是

    • 整数解析(String,Delegate)

    由于Java语言中代表人员的缺席使得Java变得虚弱/贫困,我会将其视为

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

    其中

    public interface CallBack<T,S> {
      T mitigate(S value);
    }
    
    • 回调可以为null,但只有在需要回调缓解但未提供回调缓冲时才会引发NumberFormatException。

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

2 个答案:

答案 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我知道永远不会被使用?

相关问题