如何决定创建受检异常或非受检异常[重复]

2024-03-18

我想知道如何知道创建并抛出已检查异常或未检查异常。

例如,我有一项服务,它会获取一些数据并在使用之前对其进行验证。在验证过程中,某个字段不符合规则,我想抛出一个异常,比如 ValidationException()。我如何知道决定应该检查还是不检查。

在另一种情况下,我从我的代码调用外部 Web 服务,例如 google stock api。假设我有 3 秒的超时时间。如果时间到期,我想抛出一个异常,比如 BackendException()。我如何知道它应该是检查异常还是未检查异常。

提前致谢。


可能有不同的意见,但我想说区别在于调用者应该如何处理该异常:

  • 如果您想确保调用者通过执行某些操作(记录、尝试恢复等)或重新抛出来处理异常,那么请使用已检查的异常。会说一个例子ValidationException:如果数据无效,调用者应该必须处理该问题,例如通过告诉某人修复数据或尝试其他方法。 (请注意,可能存在未经检查的验证异常,例如javax.validation.ValidationException。不检查这些内容可能有多种原因,例如如果框架不允许/支持检查异常,或者某些中央处理程序无论如何都会捕获它们,那么开发人员就不必费心了。)
  • 如果您不想强制调用者处理通常情况下的异常不应该被抛出(例如编程错误等)使用未经检查的异常。一个例子可能是总是令人恐惧的NullPointerException: it 不应该如果您想要使用的内容为 null,则可能会被视为编程错误。如果某些内容可能为空但不应该为空,您可能需要使用检查异常。

    请注意,某些库/方法使用IllegalArgumentException这是一个未经检查的异常。如果抛出此异常,通常会出现编程错误,因为违反了方法的约定(例如参数值不得为负),并且调用者应该修复代码或自己进行一些检查。

另一种观点可能是:在某些情况下是否会抛出异常?预期的异常(仍然意味着发生了某种错误)将被检查异常,因为这样您就可以与调用者沟通,他应该期望在某些情况下抛出这些异常(例如,如果数据无效)。如果异常是意外的,你不应该强迫调用者处理这样的异常,因为你根本不希望它被抛出 - 因此它将是一个未经检查的异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何决定创建受检异常或非受检异常[重复] 的相关文章

随机推荐

  • 使用 wicked_pdf 从生成的 PDF 生成 ZIP

    在我的发票系统中 我需要一个备份功能来一次性下载所有发票到一个 zip 文件中 该系统在 Heroku 上运行 因此只能临时保存 pdf 我安装了 ruby zip 和 wicked pdf gem 我当前在控制器中的代码 def zip
  • 垃圾收集线程太多

    我正在用java开发一个软件 它在接收到事件 来自传感器 时创建一个线程 这些线程的生存时间非常短 传感器发送最多 10 个事件 分钟 这个应用程序在大多数情况下都运行良好 但有时它会挂起 当查看 eclipse 调试器时 我发现有很多线程
  • 你怎么知道用 malloc() 分配多少空间?

    我是一个完全的 C 新手 我来自 C 我一直在学习内存管理和malloc 功能 我也遇到过这段代码 char a persons name malloc sizeof char 2 我不明白这是分配了多少空间a persons name 是
  • Excel更改条件格式公式

    我有一个表 其中包含许多代表时间线的单元格 每分钟一个单元格 宽度非常小 我想在该表中可视化包含三个阶段的操作 一条线上可以有多个手术 代表一个手术室 例如 如果准备工作在 10 00 开始 实际操作在 10 23 开始 则这些时间之间的所
  • 如何使用GVIM编辑远程文件?

    我在 Ubuntu 9 10 上使用 GVIM 我正在寻找正确的方法来配置 GVIM 以便能够通过 ftp 等方式编辑远程文件 HTML PHP CSS 当我使用 e scp username remotehost path to file
  • 将数据表导出到 Excel [重复]

    这个问题在这里已经有答案了 可能的重复 如何在C 中将DataTable导出到Excel https stackoverflow com questions 8207869 how to export datatable to excel
  • Mongoose 使用多个参数搜索 FindOne

    我第一次尝试使用 Angular Express mongodb 构建一些东西 所以我可能会以完全错误的方式进行处理 Express 用于提供 json 然后 Angular 会处理所有视图等 我正在使用 Mongoose 与 Mongo
  • Python运行系统命令然后退出...不会退出

    我有以下 python 代码 os system C Python27 python exe C GUI TestGUI py sys exit 0 它运行命令正常 并弹出一个窗口 但是 它不会退出第一个脚本 它就留在那里 我最终不得不强制
  • 如何使用带标签的 AWS Cli 过滤 Lambda?

    所以我知道我可以通过此命令以文本 csv 形式获取所有 lambda 函数 aws lambda list functions region us east 1 query Functions FunctionName output tex
  • 如何获取带视频 ID 的 YouTube 视频描述?

    我目前正在使用 youtube 的 Javascript API 在我的网页上显示视频 但是现在我还想从视频 ID 中检索 youtube 描述 我该怎么做呢 我只想要描述和标题 ex kind youtube video etag eta
  • 使用 Nom 5 解析带有转义引号的单引号字符串

    我是 Rust 和 Nom 的新手 我正在尝试解析可能包含转义引号的 单 引号字符串 例如 foo bar or x x or 我找到了escaped 宏 其文档 https docs rs nom 5 0 1 nom macro esca
  • LinkedList 为同一功能提供了多种方法 - 为什么? [复制]

    这个问题在这里已经有答案了 我正在检查Java util LinkedList类 发现Linked List类提供了几个方法 public void addFirst E e public boolean offerFirst E e pu
  • 通过单独的线程在表单上绘图

    我正在尝试构建一个多线程游戏 其中我有一个单独的线程用于在不是主线程的表单上进行绘画 这给我们带来了线程安全技术 我已经阅读了很多相关文章 但我不确定我是否正确理解了它 我的问题是我有一个结构 其中每个数据对象都在表单上自行绘制 所以我不知
  • 如何使用XHTML/HTML给网站添加站内搜索功能? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我真的很想学习如何为我的网站制作自己的搜索引擎 我有定义的按钮和标签 但它不搜索 我无法弄清楚用于实际搜索该网站的 HTML 或 XHTM
  • 杰克逊 FAIL_ON_UNKNOWN_PROPERTIES 为 false 不起作用

    我正在尝试使 jackason 的 thrift 反序列化向后兼容 ObjectMapper mapper getObjectMapper false pretty mapper configure DeserializationFeatu
  • 将opentok视频会议集成到parse.com + iOS应用程序中

    这个问题不仅针对代码 还针对我的应用程序设计 我有一个 iPhone 应用程序 需要 opentok 来处理视频 音频会话 我已经经历过基本样品 http www tokbox com opentok ios docs index html
  • 在 iOS 上禁用全屏自动播放

    我遇到的唯一问题是 根据苹果文档 我无法禁用全屏播放视频 这是默认启用的 需要设置如下 webView configuration allowsInlineMediaPlayback true 这是基于我的理解它应该是怎样的 然而 这不起作
  • 是否可以在 DOM 中移动

    我想创建一个
  • 在Scheme中编写一个自动记忆器。有关宏和包装器的帮助

    我在Scheme中编写自动记忆器时遇到了一些问题 我有一个有效的 memoize 函数 它创建一个哈希表并检查该值是否已经计算出来 如果之前已经计算过 则返回值 否则调用该函数 define memoizer fun let a table
  • 如何决定创建受检异常或非受检异常[重复]

    这个问题在这里已经有答案了 我想知道如何知道创建并抛出已检查异常或未检查异常 例如 我有一项服务 它会获取一些数据并在使用之前对其进行验证 在验证过程中 某个字段不符合规则 我想抛出一个异常 比如 ValidationException 我