在 Java 8 中,lambda 表达式提供了一种简洁的方式来表示方法引用。然而,当遇到可能抛出检查异常的方法时,默认的 lambda 语法就不够用了。
考虑以下方法:
Integer myMethod(String s) throws IOException
使用语法 Function
要解决此问题,可以使用多种方法:
1.定义自定义功能接口:
如果该方法在您的控制之下,建议定义一个声明已检查异常的自定义功能接口:
@FunctionalInterface public interface CheckedFunction<T, R> { R apply(T t) throws IOException; }
然后可以将该接口用作 lambda 类型:
void foo (CheckedFunction<String, Integer> f) { ... }
2.包装原始方法:
如果修改原始方法不可行,可以用一个不会抛出检查异常的新方法包装它:
public Integer myWrappedMethod(String s) { try { return myMethod(s); } catch(IOException e) { throw new UncheckedIOException(e); } }
包装的然后可以通过 lambda 引用该方法:
Function<String, Integer> f = (String t) -> myWrappedMethod(t);
3。处理 Lambda 内的异常:
或者,您可以在 Lambda 本身内处理异常:
Function<String, Integer> f = (String t) -> { try { return myMethod(t); } catch(IOException e) { throw new UncheckedIOException(e); } };
以上是在 Java 8 中使用 Lambda 表达式时如何处理检查异常?的详细内容。更多信息请关注PHP中文网其他相关文章!