gpt4 book ai didi

Java不捕获异常

转载 作者:行者123 更新时间:2023-12-02 01:56:16 25 4
gpt4 key购买 nike

我正在尝试为构造函数实现 lambda 表达式。我的构造函数可以抛出 IllegalArgumentException。我尝试了不同的方法。第一种方法是调用 lambda 表达式:

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));

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

最佳答案

发生的情况是执行了factory.create(...)并将结果传递给catchThrowable,因此异常实际上是在之前抛出的catchThrowable 执行。

要修复它,您可以使用 lambda:

catchThrowable( () -> factory.create(testVar1, null, testVar3));

或者您可以定义自己的接口(interface)来扩展ThrowableAssert.ThrowingCallable:

interface SomeClassFactory extends ThrowableAssert.ThrowingCallable {

@Override
SomeClass call() throws IllegalArgumentException;

}

这将允许您调用:

catchThrowable(factory);

请注意,自定义接口(interface)不允许在重写的方法上使用参数。

关于Java不捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69581568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com