为了账号安全,请及时绑定邮箱和手机立即绑定

包装方法抛出异常时出现编译错误

包装方法抛出异常时出现编译错误

幕布斯7119047 2023-02-16 15:43:57
在 JDK 11 和 12 中,包装为在流中抛出运行时异常的已检查异常失败并出现编译错误。package com.mmk.test;import java.net.URL;import java.util.ArrayList;import java.util.function.Function;public class App {    public static void main(String[] args) {        var list = new ArrayList<String>();        list.add("http://foo.com");        list.stream().map(wrap(url -> new URL(url)));    }    static <T, R, E extends Throwable> Function<T, R>    wrap(FunException<T, R, E> fn) {        return t -> {            try {            return fn.apply(t);            } catch (Throwable throwable) {                throw new RuntimeException(throwable);            }        };    }    interface FunException<T, R, E extends Throwable> {        R apply(T t);    }}预期:没有编译错误,也没有输出。实际:编译错误,未处理的异常。
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

FunException::apply方法没有声明任何要抛出的异常,因此当您创建一个可以抛出异常的 lambda 时

url -> new URL(url)

编译器会抱怨,因为你没有处理这个异常,也FunException::apply没有在它的throws子句中声明它。

您可以通过添加一个子句使其工作throws,即:

interface FunException<T, R, E extends Throwable> {
    R apply(T t) throws E;
}


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信