2016-06-30 11 views
2
@FunctionalInterface 
public interface GenericFunctionalInterface { 
    public <T> T genericMethod(); 
} 

これは@FunctionalInterfaceの上にあり、汎用メソッドを持っています。Java 8ラムダ汎用インターフェースメソッド

このインターフェイスを表すためにラムダ式を使用するにはどうすればよいですか?私はコンパイルだ

GenericFunctionalInterface gfi =() -> {return "sss";}; 

私はコードの下にしようとしたが、それは動作しません、エラー: 不正なラムダ式:タイプGenericFunctionalInterfaceの方法genericMethodは、私は種類を置くことができ、一般的な

です情報?

+0

参照[この回答](http://stackoverflow.com/a/22588738/ 304)およびセクション[§15.27.3](http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.3)を参照してください。 "ラムダ式は、次のすべてが真であれば関数型と一致します。関数型に型パラメータがありません。" – McDowell

+0

「汎用」メソッドを意味しますか?私は遺伝学との関係は見ません。それ以外に、それはどうやって動くのだろう? ' T geneticMethod()'メソッドは、呼び出し元が望むものを返すことを約束しているので、ラムダ式は 'String'を返します。 – Holger

+0

ありがとうHolger。それは一般的です。私はラムダ式の型情報を設定できるかどうか疑問に思っています。 –

答えて

6

型(遺伝ではない)一般的なパラメータがないメソッドレベルでは、インターフェイスレベルで宣言する必要があります。

public interface GenericFunctionalInterface<T> { 
    public T genericMethod(); 
} 

GenericFunctionalInterface<String> gfi =() -> {return "sss";}; 
関連する問題