2017-05-23 10 views
1

Java 8 FunctionalInterface注釈の詳細を知りたいと思います。私は実験として、次のコードを書きましたが、それはコンパイルされません:機能的なインターフェイスでターゲットメソッドが見つかりません

@FunctionalInterface 
public interface HasToString { 

    String toString(); 
} 

ませターゲットメソッドが

は認められなかった興味深いことに、このコンパイルを行います。

@FunctionalInterface 
public interface HasToString { 

    String notToString(); 
} 

なぜこれは?

+0

ObjectのtoString()メソッドをオーバーライドしています。だから抽象的な方法ではなく、具体的な方法です。 –

答えて

4

これは、機能インタフェースは、(脇オブジェクトのメソッドから)わずか1つの抽象メソッドを有するインタフェースであり、したがって、単一の機能契約を表すJLS 9.8

に記載されています。この「単一」メソッドは、スーパーインタフェースから継承されたオーバーライド同等のシグネチャを持つ複数の抽象メソッドの形式をとることができます。この場合、継承されたメソッドは論理的に1つのメソッドを表します。 toStringとして

「クラスObjectのパブリックインスタンスメソッド」で、あなたのインターフェイスは、機能インタフェースする資格はありません。

+0

正確には、Objectのインスタンスメソッド以外のすべて – Zarkopafilis

関連する問題