Я реплицировал ошибку, с которой столкнулся при использовании Java 8 @FunctionalInterface
(eclipse). Не компилируется следующее: Refined
производит ошибку:Ошибка переопределения метода и функционального интерфейса
@FunctionalInterface
interface Functioner<TFunnel, TFan> {
Function<TFunnel, TFan> funnelledThenFanned();
}
@FunctionalInterface
interface Receiver<T, TFan>
extends Functioner<Supplier<? extends T>, TFan> {}
@FunctionalInterface
interface Giver<TFunnel, T>
extends Functioner<TFunnel, Supplier<T>> {}
@FunctionalInterface
interface Refined<T, R>
extends Function<T, R>, Receiver<T, Supplier<R>>, Giver<Supplier<? extends T>, R> {
@Override
public abstract R apply(T arg);
@Override
public default Function<Supplier<? extends T>, Supplier<R>> funnelledThenFanned() {
...
}
}
Refined
расширение всех Function
, Receiver
и Giver
вызывает ошибку; удалите любой из них, и код компилируется. Это правильное поведение? Если да, то как я могу/должен рефакторировать?
UPDATE
Это, кажется, производит подобную ошибку:
@FunctionalInterface
interface Another<TFunnel, T>
extends Functioner<TFunnel, Supplier<T>>, Giver<TFunnel, T> {
public abstract void newMethod();
@Override
public default Function<TFunnel, Supplier<T>> funnelledThenFanned() {
...
}
}
Кроме того, отмечу, что без @FunctionalInterface
все компилирует; интерфейсные экземпляры просто не могут быть выражены как лямбда.
Какая конкретная ошибка вы видите? –
Предоставленный код компилируется без каких-либо ошибок. – gr7
@ marcus.ramsden ** Недопустимая аннотация «@FunctionalInterface»; Refined не является функциональным интерфейсом. ** В ошибке компилятора указано, что интерфейсы 'Refined' и' Another' не являются функциональными интерфейсами. Я не могу использовать lambdas, а аннотация @FunctionalInterface вызывает ошибку компиляции. –
bizness86