答えて
インタフェースが機能インタフェースである場合、Java 8では、あなたはメソッド参照を経由してラムダ式を介して、または簡単な例でそれを定義することができます(正確に一つの抽象メソッドは、以下を参照してください):
ラムダ:
Runnable runnable =() -> System.out.println("I am a runnable");
方法参照:
Predicate<Character> uppercase = Character::isUpperCase;
注:機能インタフェースはウィットを注釈される必要はありませんh @FunctionalInterface
のように便利ですが、インターフェイスに注釈を付けるときには、コンパイル時にエラーが発生します(つまり、@FunctionalInterface
) 〜@Override
)。
参照:
@FunctionalInterface
のjavadoc- Lambda expressions(のJavaチュートリアル)
- Method references(のJavaチュートリアル)
- Functional interfaces(Java言語仕様)
- Method reference expressions(Java言語仕様)
更新応答:
はい、あなたが定義しonelinerでラムダを使用しますが、コンテキストが不明である場合には、明示的なキャストが必要となることができますに依存
// cast required
System.out.println(((Predicate<Character>) Character::isUpperCase).test('A'));
// no cast required
Arrays.asList("foo","bar").forEach(System.out::println);
Arrays.asList(1,2).forEach(i -> System.out.println(i*2));
ちょうど好奇心が強い、そのインスタンスの戻り値を1行に返すことはできますか? –
機能的なインターフェースには** abstract **メソッドが1つしかないと言うだけの方がいいです。これは 'default'メソッドだけでなく' static'メソッドもあるので、無関係なメソッドのさまざまなタイプに注意しないようにしますJava 9では 'private'メソッドが許可されます。これは、' interface'が機能的なインターフェースであるかどうかという疑問とは無関係です。より正確にするために、 'java.lang.Object'で宣言されたメソッドと一致しない抽象メソッドが1つしかないので、2つの抽象メソッドを持つ' Comparator'は依然として機能インターフェースです。 – Holger
@fireflieslive: "1つの行に返されるインスタンスの返り値"が何を意味するのかははっきりしていません。 – Holger
場合によっては可能です。例えば :
List<T> list = ...
Collections.sort(list, (t1, t2) -> compareOperation(t1,t2));
functional interface Comparator<T>
は、1つの抽象メソッドを含むインタフェースです。 See docs.oracle
- 1. ビットマップゲームオブジェクトの複数インスタンスを実装する
- 2. インスタンス変数。ヘッダーと実装の比較
- 3. ジェネリックインターフェイスのインスタンスを実装するすべてのクラスをインスタンス化
- 4. 新しいオブジェクトのインスタンス化とreset()メソッドの実装
- 5. Cuis/Squeak/Pharoのインスタンス動作(テスト用)の実装方法?
- 6. .NETインターフェイスを実装するC#のIronPython型のインスタンス化
- 7. カウントを行うためのセマフォの実装。現在実行中のインスタンスの数
- 8. 別のクラス実装からCGFloatインスタンス変数を取得する
- 9. voidでインスタンス化できるスマートポインタの実装方法は?
- 10. Mappableインターフェイスを実装するオブジェクトの新しいインスタンスを作成
- 11. インスタンスの正規化を実装したい
- 12. 特定のインスタンスでメソッドを実装しますか?
- 13. インスタンスの番号付けを実装する方法は?
- 14. クラスのインターフェイスを実装するタイミングとインターフェイスの匿名実装をインスタンス化するタイミング
- 15. Enumerable.OfTypeを実装するTypeインスタンスの引数を持つ<T>を実装する
- 16. C++:派生インスタンスを 'extends?'で作成します。ベースインスタンス/実装ダウンキャスト?
- 17. AWSインスタンスでSSLを実装する方法
- 18. は実装をインスタンス化できませんでした:com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftStoreManager
- 19. TargetInvocationException IEMDKListenerを実装するオブジェクトをインスタンス化するとき
- 20. リストのアレイベースの実装(カーソルの実装)
- 21. XMLドキュメントインターフェイスの実装とクラスの実装
- 22. コンクリートクラスの複数のインスタンスと抽象クラスの複数の実装の比較
- 23. haskellの自己定義データのFunctorのインスタンスを実装する方法
- 24. 実装ファイル内のインスタンス変数 - 非公開と保護の比較
- 25. JavaのSwing API実装、オブジェクトJButtonのインスタンスが認識されない
- 26. 静的メソッドのインタフェースで実装のインスタンスを作成していますか?
- 27. Tomcat:java.security.Principalの実装
- 28. llvm.pow.f64の実装
- 29. ログウォッチャーの実装
- 30. パーシャルビューの実装
インタフェース(それは機能的インタフェースですか?)とその必要な実装です。 – Eran
また、行の長さによって決まります: –
はい。 1行の見た目はインタフェースの複雑さに左右されます。 – khelwood