Java 8 @FunctionalInterface
(eclipse)を使用しているときに実行したエラーを再現しました。以下はコンパイルされません。 Refined
エラー生成:Function
、Receiver
とGiver
の全てを延長メソッドのオーバーライドと機能インターフェイスのコンパイルエラー
@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
にエラーが発生します。これらのいずれかを削除すると、コードがコンパイルされます。これは正しい動作ですか?もしそうなら、私はどのようにリファクタリングできますか?
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'と' Another'インタフェースは機能インタフェースではないと述べています。私はラムダを使用することができませんし、 '@ FunctionalInterface'アノテーションはコンパイルエラーを生成します。 –
bizness86