方法覆盖和功能接口编译错误

时间:2016-12-16 18:23:19

标签: java-8 override functional-interface

我已经复制了使用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扩展所有FunctionReceiverGiver会导致错误;删除其中任何一个,代码编译。这是正确的行为吗?如果是这样,我该怎样/应该重构?

更新

这似乎产生了类似的错误:

@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所有内容都会编译;接口实例不能表示为lambda。

3 个答案:

答案 0 :(得分:1)

Functioner有一个抽象方法funnelledThenFanned()Another添加了newMethod(),使 2 抽象方法超出了@FunctionalInterface强加的> 1 。

这里没有任何谜。

答案 1 :(得分:0)

从Eclipse Mars切换到Oxygen解决了这个问题。谢谢。

答案 2 :(得分:0)

这是Eclipse bug 453552,固定为4.6M1,所以任何霓虹灯发布(目前是Neon.1,很快就是Neon.2)都包含修复。