0

我复制了在使用 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。

4

3 回答 3

1

Functioner有一个抽象方法funnelledThenFanned(),并Another添加了newMethod()2抽象方法,超过了1的 限制@FunctionalInterface

这里没有什么神秘之处。

于 2016-12-16T23:26:47.203 回答
0

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

于 2016-12-17T01:29:30.187 回答
0

这是Eclipse 错误 453552,自 4.6M1 起已修复,因此任何 Neon 版本(当前为 Neon.1,很快为 Neon.2)都包含该修复。

于 2016-12-17T13:53:33.580 回答