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

使用 lambda 并抛出覆盖异常时,“覆盖方法不会抛出异常”

使用 lambda 并抛出覆盖异常时,“覆盖方法不会抛出异常”

茅侃侃 2021-07-09 11:17:03
为了防止重复关闭,这个问题和这个完全不同。考虑我有以下界面@FunctionalInterfaceinterface FuncE0<R, E extends Exception> {  R call() throws E;}它适用于 lambdaFuncE0<Integer, IOException> get() {  return () -> 1;}但是如果我让接口从 扩展Callable,它就会中断。@FunctionalInterfaceinterface FuncE0<R, E extends Exception> extends Callable<R> {  @Override  R call() throws E;}用法相同。编译器给了我以下错误JustTest.java:8: error: call() in <anonymous JustTest$> cannot implement call() in FuncE0    return () -> 1;           ^   overridden method does not throw Exception如果删除重写方法R call() throws E中FuncE0,它的工作原理。如果您使用匿名类,它会起作用。如果您使用 eclipse,则 ECJ 可以工作。当我覆盖抛出的异常时发生了什么?这是一个javac错误吗?我正在使用 jdk_1.8_112最小化代码以重现import java.io.IOException;import java.util.concurrent.Callable;public class JustTest {  public static FuncE0<Integer, IOException> get() {    return () -> 1;  }  @FunctionalInterface  public interface FuncE0<R, E extends Exception> extends Callable<R> {    @Override    R call() throws E;  }}
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

这是一个已修复的 jdk 错误1.8.0_171(可能不是最低修复版本)。


查看完整回答
反对 回复 2021-07-14
  • 1 回答
  • 0 关注
  • 228 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号