問題タブ [method-reference]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - パラメータとしての Java Pass メソッド
メソッドを参照渡しする方法を探しています。Java がメソッドをパラメーターとして渡さないことは理解していますが、代替手段を取得したいと考えています。
インターフェースはメソッドをパラメーターとして渡す代わりになると言われましたが、インターフェースが参照によってメソッドとして機能する方法がわかりません。私が正しく理解していれば、インターフェイスは単に定義されていないメソッドの抽象的なセットです。いくつかの異なるメソッドが同じパラメーターで同じメソッドを呼び出す可能性があるため、毎回定義する必要があるインターフェイスを送信したくありません。
私が達成したいのは、これに似たものです:
次のように呼び出されます。
java - Java 8のインスタンスメソッド参照型の違いは何ですか?
そのため、Java 8 ではメソッド参照が導入され、ドキュメントでは 4 つの型について説明されています。
私の質問は、2 つのインスタンス タイプの違いは何ですか?
- 特定のオブジェクトのインスタンス メソッドへの参照。
- 特定の型の任意のオブジェクトのインスタンス メソッドへの参照。
どちらも参照を参照していますが、何が大きく違うのでしょうか? それらを解決するために使用される型推論が異なるということですか? (彼らの例では)一方がクロージャーで、もう一方がラムダであることは重要ですか?メソッドの引数の数と関係がありますか?
java - Comparator.comparing が String::toLowerCase メソッド参照で機能しないのはなぜですか?
文字列の配列を変更せずに逆の順序で (大文字と小文字を区別せずに) 並べ替えようとしています。だから私はJava8ストリームを使用しています。しかし、私はそれを行うことができません。
これが私の試みです:
ここでの問題はString::toLowerCase
、静的メソッドでは受け入れられないことですComparator.comparing
。
その間、私は配列をソートすることができましたが、それを変更しました:
では、最も簡単な回避策は何ですか?
java - アリティが異なるオーバーロードされたメソッドのメソッド参照が無効です
式をコンパイルしようとするとComparator.comparing(String::toLowerCase)
、Java コンパイラがエラーを返します。詳細については、次の質問を参照してください。
Comparator.comparing が String::toLowerCase メソッド参照で機能しないのはなぜですか?
できるだけ問題を減らすように努めました。特に、他のクラスへのほとんどすべての依存関係を削除しました。メインメソッドには、2 つのメソッド呼び出しが含まれています。最初のステートメントはエラーなしでコンパイルされますが、2 番目のステートメントはエラーになります。
パラメータの数が一致しないため、2 番目のbazメソッドはこのコンテキストでは適用できないため、これは奇妙です。JLS8 (15.13) を見てきました。ただし、メソッド参照のルールは非常に複雑であるため、これは役に立ちませんでした。
Q: 2 番目のケースでコンパイル エラーが発生するのはなぜですか? JLSによると、本当にコンパイルエラーが発生するはずですか? 他の質問に関するいくつかのコメントによると、Netbeans にはコンパイル エラーはありません。
参考までに、JDK8 バージョン 1.8.0-b132 を使用しています。コマンド ラインでプログラムをコンパイルすると、コンパイラは次のエラー メッセージを表示します。
java - 例外をスローするためのメソッド リファレンスはありますか?
次のコードがあるとします。
より簡潔に記述する方法、現在利用できる方法、または将来の Java リリースで利用できる方法はありますか? 私は次のようなものを期待しています:
追加情報として、例外的な状況が発生する可能性があるメソッドにこのコードを使用するつもりですが、常にRuntimeException
スローされる必要はありません。例外的な状況が発生した時点で、発信者がやりたいことを自由に行えるようにしたいと考えています。
私には思えますが、これはJava 8では不可能です。これについては議論されていますか?これが不可能な理由はありますか?
java - 動作を把握できません: ラムダによるメソッド参照
以下のコードを検討してください。
run()
メソッドRunnable
によって返されているインスタンスのtestStatic
メソッドが呼び出されるはずでした。コンソールの出力は「実行」である必要があります。
しかし、このコードはrun()
インスタンスのメソッドを呼び出しておらずr
、コンソールに何も出力されていません。
どなたか理由を教えてください。
メソッド参照 "::" を適切に使用していない場合はコメントしてください。