一尘不染

Java 抛出异常的Java 8 Lambda函数?

java

我知道如何创建对具有String参数的方法的引用,并返回int,它是:

Function<String, Integer>

但是,如果该函数引发异常,例如定义为:

Integer myMethod(String s) throws IOException

如何定义此参考?


阅读 1109

收藏
2020-02-28

共1个答案

一尘不染

你需要执行以下操作之一。

如果是你的代码,请定义自己的函数接口,该接口声明已检查的异常:

@FunctionalInterface
public interface CheckedFunction<T, R> {
   R apply(T t) throws IOException;
}

并使用它:

void foo (CheckedFunction f) { ... }

否则,包装Integer myMethod(String s)一个不声明检查异常的方法:

public Integer myWrappedMethod(String s) {
    try {
        return myMethod(s);
    }
    catch(IOException e) {
        throw new UncheckedIOException(e);
    }
}

接着:

Function<String, Integer> f = (String t) -> myWrappedMethod(t);

要么:

Function<String, Integer> f =
    (String t) -> {
        try {
           return myMethod(t);
        }
        catch(IOException e) {
            throw new UncheckedIOException(e);
        }
    };
2020-02-28