Java不捕获异常



我试图实现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);

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

相关内容

  • 没有找到相关文章

最新更新