我有相同参数和响应类型的函数,如;
public ResponseType functionA(ParamType) throws Exception1
public ResponseType functionB(ParamType) throws Exception1
我用相同的重复try/catch块从不同的地方调用这些函数。有没有办法减少重复代码?
try{
return functionA(obj);
} catch (Exception1 e) { .... }
catch (Exception2 e) { .... }
catch (Exception3 e) { .... }
try{
return functionB(obj);
} catch (Exception1 e) { .... }
catch (Exception2 e) { .... }
catch (Exception3 e) { .... }
我试图创建一个如下的函数,但我得到了
在try块中从未引发异常e1
如预期的那样。
public ResponseType callFunction(Function<ParamType, ResponseType> function, ParamType obj) {
try{
return function.apply(obj)
}catch (Exception1 e) { .... }
catch (Exception2 e) { .... }
catch (Exception3 e) { .... }
}
1条答案
按热度按时间von4xj4u1#
问题是
Function.apply
未声明为引发任何异常,因此通常不可能从实现中引发已检查异常,也不可能在调用站点从中捕获已检查异常。(忽略评论中提到的不寻常的解决方法。)然而,Java并没有限制lambda表达式只能与标准函数接口一起使用,所以当您需要处理特定的异常类型时,最好的方法是创建自己的异常类型。
这可以以与
java.util.function.Function
类似的方式使用:(修改为在catch块中抛出运行时异常,以便进行编译)
调用代码与任何标准功能接口相同:
或等效地: