为防止重复出现,该问题与this one完全不同。
考虑我有以下界面
@FunctionalInterface
interface FuncE0<R, E extends Exception> {
R call() throws E;
}
在lambda上正常工作
FuncE0<Integer, IOException> get() {
return () -> 1;
}
但是,如果我让接口从Callable
扩展,则会中断。
@FunctionalInterface
interface 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
,它将起作用。当我覆盖抛出的异常时会发生什么?这是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;
}
}
答案 0 :(得分:0)
这是一个jdk错误,已修复1.8.0_171
(可能不是最低修复版本)。