问题标签 [checked-exceptions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
21599 浏览

java - 为 Java 中的自定义检查异常编写 JUnit 测试用例?

我正在为我的类编写一个测试用例,其中包含抛出异常的方法(已检查和运行时)。我已经尝试过此链接中建议的不同可能的测试方式。. 看来它们似乎只适用于运行时异常。对于 Checked 异常,我需要执行 try/catch/assert,如下面的代码所示。是否有任何替代 try/catch/assert/. 您会注意到testmethod2() and testmethod2_1()显示编译错误但testmethod2_2()不显示使用 try/catch 的编译错误。

测试类:

0 投票
1 回答
113 浏览

jpa - JPA:检查异常以验证数据库连接

我使用 JPA,在 persistence.xml 文件中配置了数据源。

如果部署应用程序后数据库名称不再存在或密码错误,因为部署后已更改(通常是数据库连接失败),我必须抛出什么异常(检查异常)?

因为我的java项目中的异常PersistenceException没有成功捕获它......

十分感谢。

0 投票
1 回答
701 浏览

java - 好图案?... method() 抛出 X

一些背景,然后是一些问题。

我最近才发现接口(或类)在其方法可能抛出的(已检查)异常类型中可能是通用的。例如:

关键是,如果您稍后实例化它IOException并调用该run方法,编译器就会知道您需要捕获IOException它或将其标记为已抛出。更好的是,如果X是 a RuntimeException,您根本不需要处理它。

这是一个使用上述接口的人为示例,但它基本上是一个回调,应该很常见。

我们正在调用一个通用实用程序方法runTwice(可能在外部库中定义)来运行我们自己的具有特定检查异常的特定方法,并且我们不会丢失有关可能抛出哪个特定检查异常的任何信息。

另一种方法是简单地使用throws Exception方法Runnable.runrunTwice方法。这不会限制Runnable接口的任何实现,但会失去检查异常的优势。或者可能根本没有throws,也失去了检查异常的优势并可能强制实现包装。

因为我从未见过throws X,也许我错过了一些东西。此外,我已经多次看到回调示例用作反对检查异常的参数而没有被反驳。(这个问题对检查异常的优缺点不感兴趣。)

一般是throws X个好主意吗?优缺点都有什么?你能举一些使用throws X或没有但应该有的例子吗?

基本上,我想要一些进一步的见解。您可能会对以下示例发表评论。

  • OutputStream抛出IOException(也许ByteArrayOutputStream可以延伸GenericOutputStream<RuntimeException>

  • Callable/Future.get

  • 公共池borrowObject/makeObject

(自编辑以来,我不是在问这些是否可以/应该在回想起来时进行不同的设计。相反,会throws Xthrows Exception。)

0 投票
2 回答
702 浏览

java - 终端操作(例如 forEach)可以重新抛出已检查的异常吗?

我有一个删除一些文件的方法:

try/catch 块降低了操作的可读性,尤其是与使用方法引用相比:

不幸的是,该代码无法编译。

有没有办法应用在终端操作中引发检查异常并简单地“重新引发”任何异常的操作?

我知道我可以编写一个包装器,将检查的异常转换为未经检查的异常,但如果可能的话,我宁愿坚持使用 JDK 中的方法。

0 投票
2 回答
38 浏览

java - 检查异常的懒惰和有效的方法

我正在为学校编写小型 Java 网络程序;显然 RTFM 是必需的,但是在开发骨架代码时,仅由编译器运行它以查看我是否忘记了一些检查的异常(而不是:RTM-> 手动检查...)是否有效(显然很懒惰)?

0 投票
3 回答
1839 浏览

java - 拦截器 Java 和检查的异常

我正在使用 Spring 的 AOP 功能。我有课叫

现在,对该方法的调用insertUserService被一个拦截器拦截,该拦截器进行一些验证。这个验证拦截器抛出一个名为BusinessException. 现在,当抛出此异常时,Java 会抛出一个UndeclaredThrowableException因为BusinessExcepetion未在 throws of 中声明的原因insertUserService。有没有办法解决这个问题UndeclaredThrowableException而不必BusinessException在 throws 子句中声明。

原因insertUserService本身就没有抛出 a BusinessException,所以它看起来应该有办法解决。

0 投票
2 回答
723 浏览

java - JVM 如何处理 RuntimeException(s)

在创建自定义异常时,如果要创建已检查的异常,我们扩展 Exception 类,对于未检查的异常,我们扩展 RuntimeException 类。我的问题是,当它们都是Exception类的子类时,JVM 如何以不同的方式处理 RuntimeException 和 Exception 的子类。

0 投票
3 回答
883 浏览

java - 为什么在这种情况下允许抛出已检查的异常类型?

我偶然注意到这个throw语句(从一些更复杂的代码中提取)编译:

有一个短暂而快乐的时刻,我认为受检异常最终决定已经死了,但它仍然对此感到高兴:

try块不必为空;只要该代码不引发检查异常,它似乎就可以有代码。这似乎是合理的,但我的问题是,语言规范中的什么规则描述了这种行为?据我所见,第 14.18 节 throw 语句明确禁止它,因为t表达式的类型是已检查异常,并且它没有被捕获或声明为抛出。(?)

0 投票
1 回答
58 浏览

java - 不抛出异常类型处理的问题 - 想要一个更通用的多捕获版本

很抱歉 TL;DR,但我觉得它需要一些解释,否则会被误解。

我有一个方法可以调用(通常是外部的)代码,我希望有时会抛出 RuntimeException,并使用可以抛出 InterruptedException 或 ExecutionException 的期货,并且我希望能够从调用直到抛出异常,以及抛出的异常。我写了一些有用的东西,但不幸的是,代码看起来让我觉得我做错了什么。我认为我真正想要的是 multi-catch 成为一个更通用的概念。这将允许非常干净的代码来解决它,有点像这样:

并有一个方法可以结束对外部代码的调用......

随后做

等等。请注意,我确实要注意总是想立即重新抛出异常——这取决于谁在使用这些结果,他们想用它们做什么。我可能会做类似的事情

当然,我可以让生成结果的函数中抛出异常,而不是捕获异常并将其作为结果返回。这有两个相当大的问题: 1. 现在返回一组值会很尴尬——我也许可以将一个 Set 传递给需要“返回”结果的方法,它会修改该集合而不是返回一个集合。这允许集合在返回异常时是最新的。例如

  1. 如果围绕外部方法调用的代码抛出运行时异常怎么办?现在我没有简单的方法来区分异常调用是来自对外部代码的实际调用,还是其他什么!我在尝试这种设计时实际上遇到了这个问题。该代码从其他地方抛出了 IllegalArgumentException,我的代码处理将其视为是从 SomeReturnType externalCodeCallGetSomeReturnValue(Bar bar) 中抛出的。这似乎是一个代码健康问题,这就是我放弃这个解决方案的原因。

我采用的解决方案是将异常存储为异常。但是,我讨厌丢失那种类型的信息。没有额外的代码工作,如果有东西想抛出它,它必须声明“抛出异常”,这不好,类似的代码健康问题。有没有好办法来处理这种情况?我最终要让它按照我想要的方式工作如下:

显然,这很丑陋。如果我讨厌构造函数,我可以很容易地用一个接受异常的构造函数替换它们,但这会将类型检查削弱为仅运行时调用 throwException()。无论如何,有没有更好的替代品?请注意,我使用的是 JDK 7,所以虽然 JDK 8 的答案会很有趣,但这并不能解决我正在处理的问题。

0 投票
5 回答
1534 浏览

java - 如何决定我应该在方法签名中添加异常还是在方法中处理它?

我在 java 方面有很多经验(主要是数学、UI 和图形),但我从来没有认真使用过像 JDBC 这样的 API,或者org.w3c.dom你严重依赖处理检查的运行时异常。因此,如果我编写了一堆使用这些 API 的方法,我如何决定应该如何处理异常,是应该立即捕获它们还是将它们添加到方法的签名中,从而将异常传播到框架的更高级别堆栈,它们都在哪里处理?似乎我想要对这些检查的异常做的就是在遇到错误时退出应用程序。