知优码

您现在的位置是:首页 > 开源项目 > 项目经验

项目经验

Java8中Lambda异常

2021-01-13项目经验
Java8中Lambda异常

一、概述

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

Function<String, Integer>

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

Integer myMethod(String s) throws IOException

如何定义此参考?

二、详解

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

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

    @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);
            }
        };