Java 没有捕获异常
Java does not catch exception
我正在尝试为构造函数实现 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));
或者您可以定义自己的接口扩展 ThrowableAssert.ThrowingCallable
:
interface SomeClassFactory extends ThrowableAssert.ThrowingCallable {
@Override
SomeClass call() throws IllegalArgumentException;
}
这将允许您调用:
catchThrowable(factory);
请注意,自定义接口不允许重写方法上的参数。
我正在尝试为构造函数实现 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));
或者您可以定义自己的接口扩展 ThrowableAssert.ThrowingCallable
:
interface SomeClassFactory extends ThrowableAssert.ThrowingCallable {
@Override
SomeClass call() throws IllegalArgumentException;
}
这将允许您调用:
catchThrowable(factory);
请注意,自定义接口不允许重写方法上的参数。