为了防止重复关闭,这个问题与
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
-
如果你使用匿名类,它就会工作。
-
如果您使用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;
}
}