Java使用自定义工厂接口时catchThrowable无法捕获异常问题咨询
问题产生原因
你调用catchThrowable时的代码执行顺序出错:
factory.create(testVar1, null, testVar3)会在传入catchThrowable之前就直接执行,此时构造方法抛出的IllegalArgumentException还没进入catchThrowable的异常捕获逻辑,就直接终止了程序。你写的强转操作是对factory.create的执行结果做强转,而不是把构造调用封装成待执行的ThrowingCallable实例。- 对比你第一种正常的写法:
() -> new SomeClass(testVar1, null, testVar2)是把构造调用封装成了一个待执行的lambda函数(即符合ThrowingCallable签名的实例),传给catchThrowable后由其内部执行该lambda时才会触发构造调用,异常自然可以被正常捕获。
修复方案
你只需要把factory.create的调用逻辑也封装到lambda中传入catchThrowable即可,不需要额外强转:
catchThrowable(() -> factory.create(testVar1, null, testVar3));
内容的提问来源于stack exchange,提问作者Farrukh Nabiyev
相关产品推荐
相关产品推荐

