当前位置: 首页 > 知识库问答 >
问题:

Java不捕捉异常

霍财
2023-03-14
catchThrowable(() -> new SomeClass(testVar1, null, testVar2));
interface SomeClassFactory{
        SomeClass create (String testVar1, String persId, String testVar2) throws IllegalArgumentException;
}

SomeClassFactory factory = SomeClass::new;

然后我把它用作:

catchThrowable((ThrowableAssert.ThrowingCallable) factory.create(testVar1, null, testVar3));

但是最后一行代码没有捕获任何异常,我的代码给出运行时异常并停止。你能解释为什么会发生这种情况,如果可能的话,如何修复它吗?

共有1个答案

都博裕
2023-03-14

发生的情况:您正在计算factory.create(...)的值,然后将其作为参数传递给catch throwable,因此在尝试catch之前发生了异常。

有两种解决方案:

第一个解决方案是使用

catchThrowable(()->factory.create(testVar1, null, testVar3));
interface SomeClassFactory extends ThrowableAssert.ThrowingCallable {
    @Override
    SomeClass call() throws IllegalArgumentException;
}
catchThrowable(factory);
 类似资料:
  • 我正在建造我的第一个Java图书馆。代码使用了大量的IO方法,因此可以想象有大量的异常需要捕获。但我在想,我应该抛出例外吗?我的意思是,捕捉异常当然是应用程序编写者的工作。因为即使我抓到了它们,我也不知道应用程序在发生这种情况时会做什么。 我应该抛出IOExceptions等,还是应该在库代码中捕获它们?

  • 本文向大家介绍.NET Framework 捕捉异常,包括了.NET Framework 捕捉异常的使用技巧和注意事项,需要的朋友参考一下 示例 在特殊情况下,代码可以并且应该引发异常。例如: 尝试阅读流的末尾 没有访问文件的必要权限 尝试执行无效的操作,例如被零除 从Internet下载文件时发生超时 调用方可以通过“捕获”它们来处理这些异常,并且仅应在以下情况下进行: 它实际上可以解决特殊情况

  • 问题内容: 我听说捕捞被认为是不好的作法。我当前正在加载一个不能保证在PATH上的.dll,并希望在不存在的情况下切换到用户配置的位置。 有更好的方法吗?还是在这里接受是可以接受的? 问题答案: 除了提供有关如何从技术上解决问题的建议以外,我想花点时间解释一下为什么它首先被认为是“不好的做法”。 让我们从澄清什么是类开始。 在Java中,将引发错误和异常(它们是主要类型)。通过使用关键字可以完成上

  • 在节点中。在js服务器上,捕获SIGTERM和捕获SIGINT有什么区别吗? 我认为进程不应该能够防止SIGINT关闭? 我是否能够捕获两个信号并阻止退出?我的实验表明答案是肯定的,但从我所读到的内容来看,SIGINT总是假设关闭一个进程。 或者我把SIGINT和SIGKILL混淆了?也许SIGKILL是我无法恢复的信号? 捕捉这些信号当然可以让我优雅地关机: 我想我把SIGINT和SIGKILL

  • 本文向大家介绍Java多线程之多线程异常捕捉,包括了Java多线程之多线程异常捕捉的使用技巧和注意事项,需要的朋友参考一下   一:为什么要单独讲多线程的异常捕捉呢? 先看个例子:   在run中手动抛出了一个运行时异常,在main中启动线程,catch语句块中捕捉下异常,捕捉到打印一句话。运行结果如下图:   发现异常被抛到了控制台,没有打印catch块中的语句。   结论:多线程运行不能按照顺

  • 问题内容: 我正在尝试编写一个使用PyQt5在系统托盘中运行的应用程序。该代码有时会引发异常,我需要能够捕获它们。 我希望当应用程序中发生异常时,会退出主事件循环,因此像这样捕获它应该起作用: 在下面的示例中,当我按下“提高”按钮时,我仅看到回溯,但从未看到打印过的内容。 有2个类似的问题,但是那里的答案并没有满足我的需要: 抓住PyQt中的任何异常:OP希望 监视 异常,不退出偶数循环。 防止P