Java Guava预条件运行时异常处理

Java Guava预条件运行时异常处理,java,exception,guava,preconditions,unchecked-exception,Java,Exception,Guava,Preconditions,Unchecked Exception,据我所知,在更改某些对象状态之前,我们使用Guava先决条件快速失败(stackoverflow给出了一个很好的答案)。这很好。但是,它会引发运行时异常,这不是应用程序用户最喜欢的异常(500个错误等等…)。所以我需要你在设计方面给我一些帮助 我有一个声明许多方法的接口。每个方法都有必须控制的参数(例如:NOTNULL)。因此,在实现类中,我使用如下说明: Preconditions.checkNotNull(fooObj); 但是,调用此API的程序可能会由于运行时异常而崩溃,在本例中为Nu

据我所知,在更改某些对象状态之前,我们使用Guava先决条件快速失败(stackoverflow给出了一个很好的答案)。这很好。但是,它会引发运行时异常,这不是应用程序用户最喜欢的异常(500个错误等等…)。所以我需要你在设计方面给我一些帮助

我有一个声明许多方法的接口。每个方法都有必须控制的参数(例如:NOTNULL)。因此,在实现类中,我使用如下说明:

Preconditions.checkNotNull(fooObj);
但是,调用此API的程序可能会由于运行时异常而崩溃,在本例中为NullPointerException

那么如何处理这些未检查的异常呢

多谢各位

--------编辑 应用程序层:

  • 数据访问层

  • 声明交换DTO的方法的API

  • 使用Guava实现API和检查参数的过程

  • Web服务取决于流程层


    • 前提条件的失败意味着程序有错误。用户不应该遇到这些问题,除非他们在您的程序中发现了错误


      在出现错误的情况下,您的程序通常应该向用户显示某种错误消息,但更重要的是,您应该得到通知,以便能够首先修复错误。

      您可以通过设计程序来处理错误,以确保错误不会发生。这些先决条件方法旨在检测bug并帮助准确找到根本原因,而不是验证用户输入

      如果您只定义API,而不是调用它的程序,那么您可以通过在文档中告诉人们相关参数不能为null来“处理”它,并将满足该要求的问题留给他们


      如果您也在编写一个调用程序,首先要确保异常永远不会发生。您也可以将调用放入
      try/catch
      块以捕获
      NullPointerException
      ,但是catch块的目的应该是更好地通知错误(例如记录日志消息或触发警报)和触发情况,并且可能会更优雅地关闭,或者给出更用户友好的错误消息。尝试从故障中恢复时应该非常小心,否则根本就不要这样做-如果发生这种故障,则说明出现了您无法预见的错误,正确的恢复方法可能无法预测。

      引发异常的程序不会崩溃。它抛出一个异常。看起来你在写一个网络应用。因此,这将向用户显示一个错误页面。您可以在此错误页面中显示任何您想要的内容。但是这样的异常表明您的代码有一个bug。所以,你必须做的是修复你的代码,以避免这个bug,从而避免在第一时间显示错误页面。那么,您认为在哪一层处理此异常最方便?例如,在调用必须强制捕获和取消选中异常的API的方法中,您没有提到任何关于应用程序及其层的内容。我不知道它是什么类型的应用程序,它使用什么技术,它有哪些层。如果它是一个传统的网络应用程序,它就不应该被捕获。让它冒泡,直到web容器显示一个错误页面。你是对的。很抱歉给您带来不便。看我的编辑。啊!所以你的意思是输入数据必须在早期被拒绝,对吗?例如,将通过字段验证向组件发送请求的表单?对于没有GUI的SOA体系结构,情况如何?感谢如果要验证用户输入,则不应使用
      前提条件或运行时异常。你应该换个方式来处理。