为了防止重复关闭,这个问题和这个完全不同。
考虑我有以下界面
@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;
}
}
翻翻过去那场雪
相关分类