小编典典

抛出异常的Java 8 Lambda函数?

all

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

Function<String, Integer>

但是,如果函数抛出异常,这将不起作用,例如定义为:

Integer myMethod(String s) throws IOException

我将如何定义这个参考?


阅读 105

收藏
2022-03-08

共1个答案

小编典典

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

  • 如果是您的代码,则定义您自己的功能接口来声明检查的异常:
    @FunctionalInterface
    

    public interface CheckedFunction {
    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);
        }
    };
2022-03-08