0

@FunctionalInterfaceJava 8 (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エラーが発生します。これらのいずれかを削除すると、コードがコンパイルされます。これは正しい動作ですか?もしそうなら、どのようにリファクタリングできますか/すべきですか?ReceiverGiver

アップデート

これは同様のエラーを生成するようです:

@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また、すべてがコンパイルされていないことに注意してください。インターフェイス インスタンスをラムダとして表現することはできません。

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 に答える