私はJava 8 featuresについて読んでいましたが、メソッド参照があることがわかりましたが、メソッドがオーバーロードされているときにどのメソッドを指定するのかわかりませんでした。誰か知っていますか?空でない引数のメソッド参照?
13
A
答えて
5
:
は、ラムダ式を使用することができますか?ターゲット・タイプが 適切なパラメータのタイプであるため
メソッドやコンストラクタ引数。メソッドまたはコンストラクタがオーバーロードされている場合、ラムダ の式がターゲットタイプと一致する前に、 オーバーロード解決の通常のメカニズムが使用されます。 (過負荷の解決の後に、 )複数のマッチング方法またはコンストラクタが同じ 機能記述子を持つ異なる機能インターフェイスを受け入れることができる場合、ラムダ式は である必要があります。 ;
明示的にターゲットタイプを提供するキャスト式。たとえば、次のように
Object o =() -> { System.out.println("hi"); }; // Illegal: could be Runnable or Callable (amongst others)
Object o = (Runnable)() -> { System.out.println("hi"); }; // Legal because disambiguated
だから、あなたがあいまいな署名がある場合は、それをキャストする必要があります。
6
コンパイラはメソッドシグニチャと機能インターフェイスを一致させます。
Integer foo(){...}
Integer foo(Number x){...}
Supplier<Number> f1 = this::foo; //()->Number, matching the 1st foo
Function<Integer, Number> f2 = this::foo; // Int->Number, matching the 2nd foo
基本的に、f2
はInteger
を受け入れ、Number
を返すことができるものである、コンパイラは、第二foo()
が要件を満たしていることを知ることができます。 this Lambda FAQから
関連する問題
- 1. メソッドのパラメータ/引数をメソッド参照に渡す - bind、anonymous、という名前の
- 2. 参照引数を使ってpythonメソッドを呼び出す
- 3. は参照で引数を渡すと
- 4. Cでメソッド内の引数として参照を渡す方法#
- 5. AS3 - 引数への参照は、それは悪いですか?
- 6. 逆引き参照
- 7. java8:別のメソッド参照からのメソッド参照
- 8. 関数の引数で配列を参照する方法
- 9. メソッドと参照オーバーフロー
- 10. bashは引数/変数をパイプで参照します
- 11. Python + SWIGで参照引数とポインタ引数を受け取る方法は?
- 12. Cでの参照によるポインタ引数の受け渡し?
- 13. 関数の引数としての参照?
- 14. Python Cモジュール関数の引数の参照カウント
- 15. ZSHバインドキー逆引き参照
- 16. 空のアンドロイドプロジェクトエラーでバインディングライブラリを参照する
- 17. AppDelegateメソッドの参照 - iphone
- 18. getterメソッドのconst参照
- 19. #selectorの引数はプロパティを参照できません
- 20. ERROR:認識されないコマンドライン引数: 'PKG'(参照: 'RVMの使用')
- 21. JavaScriptの関数内から引数を参照する
- 22. 引渡しの引数が空です
- 23. メソッドは参照平等を持っていないのはなぜですか?
- 24. Webサービス参照の追加後のあいまいな参照
- 25. QTestLib - const以外の参照引数の確認
- 26. 形質からのコンストラクタ引数の参照
- 27. 拡張メソッド(ないアセンブリ参照の問題)
- 28. C# - 循環参照で名前空間を参照できません
- 29. Array値のArrayList逆引き参照
- 30. モデルメソッドのdjango逆引き参照
ラムダ式は機能的インタフェースの略語であるため、メソッドの型はインタフェースのメソッドから推測可能でなければなりません。 –
@LeonardBrünings:これはラムダ式ではなく、異なるメソッド参照です。ラムダ式は関数の実装です。メソッド参照は、既存のクラスからの既存のメソッドへの参照です。 –
@LouisWassermanリンク先の記事によると、メソッド参照はラムダ、つまり私のタグとして実装されます。 – ArtB