Чтобы предотвратить закрытие как дубликат, этот вопрос полностью отличается от этого вопроса< /а>.
У меня есть следующий интерфейс
@FunctionalInterface
interface FuncE0<R, E extends Exception> {
R call() throws E;
}
С лямбдой нормально работает
FuncE0<Integer, IOException> get() {
return () -> 1;
}
Но если я позволю интерфейсу расширяться от Callable
, он сломается.
@FunctionalInterface
interface FuncE0<R, E extends Exception> extends Callable<R> {
@Override
R call() throws E;
}
При том же использовании. Complier дает мне следующую ошибку
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 работает.
Что произошло, когда я переопределяю созданное исключение? Это ошибка джавака?
Я использую 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;
}
}
java version "1.8.0_171"
это работает - person Deadpool   schedule 13.08.2018