問題タブ [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 - Objects::nonNull と x -> x != null の間に違いはありますか?
次のクラスを検討してください。
最初の述語はメソッド参照から作成され、もう 1 つはラムダ式から作成されます。これらの述語は同じ振る舞いをします (nonNull
の本体はただ ですreturn obj != null;
)。ラムダは 2 文字短くなります (おそらく、ストリーム パイプラインを 1 行に収めることができます)。
コード スタイル以外に、 と の間に違いはObjects::nonNull
ありx -> x != null
ますか? 別の言い方をすれば、どちらかを優先する必要がありますか?
lambda-dev と lambda-libs-spec-{observers,experts} のメーリング リスト メッセージではisNull
、nonNull
とisNotNull
(初期の名前) に言及していましたが、この点については触れられていませんでした。(Objects メソッドをラムダで簡単に置き換えることができるので、誰も疑問を呈していないことに驚いていますが、一方で、そうですInteger::sum
。)
でバイトコードも見ましたjavap
。唯一の違いは、ラムダ メタファクトリ ブートストラップ メソッドに渡されるメソッド ハンドルです。
もちろん、メタファクトリーは JVM の気まぐれで、メソッド参照とラムダに対して異なることを行うことができるので、あまり証明されません。
java - インスタンス メソッドのリファレンスと Lambda パラメータ
メソッド参照の構文を理解するのに苦労しています。ここで、2 つのパラメーターa
とb
があり、参照はa
onのメソッドへのものb
です。
たとえば、私は方法を理解しています
と同等です
その場合、ラムダ パラメータはメソッド呼び出しパラメータと一致するため(o1, o2)
です。
ただし、このラムダの場合
私のIDEは、次と同等であると教えてくれます:
a.method(b)
そして、その構文をメソッド参照に置き換える規則を見つけていません。
たとえば、ラムダに 3 つ以上のパラメーターがある場合はどうなるでしょうか。それは合法ですか?最初のパラメータがメソッドの対象になり、残りがパラメータになりますか?
java - メソッド参照の使用
呼び出されたメソッドがあり、クリックされたときにメソッドを呼び出すようにしJButton
ます。もちろん、古いアプローチを使用してそれを行うことができます。saveButton
save
しかし、今日はメソッド参照などの新しい Java 8 機能を使用したいと考えています。なぜ
うまくいかない?メソッド参照を使用してどのように行われますか?
java - Java 8 コンストラクター メソッドのリファレンス
私はJava 8の本を読んでいますが、私が再現したサンプルが付属しています:
実装者:
発信者:
これが呼び出された場合、以下が出力に出力されます。
すべて問題ありませんが、メソッド参照を使用すると、perform message
メソッドが出力されません! これはなぜですか、何か足りないのですか?
このコードを使用する場合:
またはこのコード:
これは印刷されます:
例外メッセージなどは出力されません。Java 8 1.8.25 64 ビットを使用しています。
アップデート
私のように勉強している読者にとって、これは正しい実行コードです。
呼び出し元のクラスを作成しました。
クラスコンストラクターにパラメーターとして渡す必要がある「アクション機能インターフェイスから実行する」空のメソッドを実装する必要があるため、MethodReference
「空のコンストラクターである MethodReferenceCall のコンストラクター」を参照し、それを使用できます。