2016-12-16 7 views
0

Java 8 @FunctionalInterface(eclipse)を使用しているときに実行したエラーを再現しました。以下はコンパイルされません。 Refinedエラー生成:FunctionReceiverGiverの全てを延長メソッドのオーバーライドと機能インターフェイスのコンパイルエラー

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

+0

表示されるエラーは何ですか? –

+0

提供されたコードはエラーなしでコンパイルされます。 – gr7

+0

@ marcus.ramsden **無効な「@ FunctionalInterface」アノテーション。洗練されたは機能インタフェースではありません。**コンパイラエラーは、 'Refined'と' Another'インタフェースは機能インタフェースではないと述べています。私はラムダを使用することができませんし、 '@ FunctionalInterface'アノテーションはコンパイルエラーを生成します。 – bizness86

答えて

0

これは4.6M1で修正されたEclipse bug 453552であり、Neonリリース(現在はNeon.1、すぐにNeon.2)に修正が含まれています。

1

Functioner抽象メソッドfunnelledThenFanned()を有し、Another@FunctionalInterfaceによって課さの限界を超え抽象メソッドを作り、newMethod()加算します。

ここに謎はありません。

+1

'Another'は' newMethod() 'を1つの抽象メソッドとして残す' funnelledThenFanned() 'を定義しています。 – bizness86

0

Eclipse MarsからOxygenに切り替えてこの問題を解決しました。ありがとうございました。

関連する問題