問題タブ [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 - メソッド参照のキャストはどのように機能しますか?
どちらも同じシグネチャを持つインスタンス メソッドです。一方が機能し、もう一方が機能しないのはなぜですか?
の署名String::toUpperCase
:String toUpperCase();
java - 配列 clone() へのメソッド参照により NoClassDefFoundError: Array が発生する
このコードを実行すると
期待どおりに動作し、出力が得られます
ただし、ラムダをメソッド参照に置き換えると、clone()
実行時例外が発生します:
私はこれをまったく理解していません。メソッド参照とラムダは同等だと思っていたでしょう。また、取得するのは本当に奇妙な例外のようです。誰でも説明できますか?
JDK 1.8.0_25 を使用しています。
java - 静的メンバーの非静的アクセスによる Java 8 型推論
次のコードを検討してください。
先日、静的メソッドを非静的な方法で誤って呼び出したときに、これに遭遇しました。非静的な方法で静的メソッドを呼び出すべきではないことはわかっていますが、この場合、型を推測できないのはなぜでしょうか?
java - Java ストリーム内でのオブジェクトの分割
ストリーム内でオブジェクトを分割できるかどうか疑問に思っています。たとえば、次の場合Employee
:
ストリームで何らかの操作を実行したいと思います。簡単にするために、次のようにします (私のコード アーキテクチャでは、これを Employee クラス内に配置できないと仮定します。そうしないと、簡単すぎます)。
次のようになります。
問題は、このようなストリーム内にコードを入れることは可能ですか?
私は何を達成しようとしていますか?.forEach(this::someOperationWithEmployee)
- いくつかのオブジェクト フィールドをマッピングして、コードの可読性が少し向上するように処理できればと思います。
2015 年 5 月 14 日更新
Employee
この場合、オブジェクトを渡すことが間違いなくsomeOperationWithEmployee
最も美しい解決策ですが、実際にはこれを行うことができない場合があり、ラムダを使用した普遍的な解決策にする必要があります。
java - メソッド参照にクラス/オブジェクト名を明示的に指定する必要があるのはなぜですか?
現在のスコープでメソッドを参照したい場合は、クラス名 (静的メソッドの場合) または
演算子のthis
前に指定する必要があります。::
たとえば、次のように書く必要があります。
ではそれほど大きな問題ではありませんthis
が、クラス名が非常に長くなる可能性があるため、静的メソッドが過密に見えることがあります。::trimmedLength
コンパイラが代わりに単純に書くことを許可してくれたらいいのに:
ただし、Java-8 コンパイラはこれを許可しません。私にとっては、クラス/オブジェクト名が通常のメソッド呼び出しと同じ方法で解決されていれば、かなり一貫しているように思えます。これは、特定の場合に役立つメソッド参照の静的インポートもサポートします。
問題は、なぜそのような構文または類似の構文が Java 8 で実装されなかったのかということです。そのような構文で発生する問題はありますか? それとも、まったく考慮されていませんでしたか?
java - ジェネリック パラメータを持つメソッドへの Java メソッド参照
クラス宣言で指定されたジェネリック パラメータを持つメソッドへのメソッド参照を作成しようとしています。ので、私は持っています:
ここで実行可能ファイルの具体的なジェネリック型がわからないことは明確です。使用する
すぐに問題を解決しますが、その場合は不可能です。
明らかに、私は何か間違ったことをしています。しかし、それを機能させる方法は?
どうも。
java - LambdaMetafactory からの「AbstractMethodError」を解決する方法
AbstractMethodError
への呼び出しによって定義されたメソッドを呼び出すことから を取得していますLambdaMetafactory#metafactory()
。私はそれを引き起こすために何が間違っているのか理解できません。私はLambdaMetafactory#metafactory()
オンラインを使用するかなりの数の例を見てきましたが、私がやろうとしていることと完全に一致するものは見つかりませんでした.
添付のコードを実行した [全体] の出力は次のとおりです。
私がやろうとしているのは、ラムダを直接割り当てるか、クラス名とメソッド名のルックアップによって割り当てることができる単一のフィールドを持つクラスを作成することです。二重性の理由は、呼び出されるメソッドが指定された方法 (コードで直接指定されるか、構成ファイルで指定されるか) を抽象化するためです。
添付のコードはListMaker
、オブジェクトの文字列表現から 1 要素のリストを生成するメソッドを使用して、関数インターフェイスを定義します。これには、インターフェイスのメソッドのシグネチャに一致する関数を実装する静的メソッドが含まれておりlistify
、サンプルの set-the-method-directly 部分に使用されます。
コードは次のとおりです。
オンラインで見つけた同様の例を理解できましたが、それらはすべて最終結果です。私が間違っていることを理解するのに役立つ最終結果がどのように導き出されたかについて、 (少なくとも私にとっては)十分に説明的なものを見つけることができませんでした。
collections - 要素内のフィールドで並べられた要素のリストを確認する
Guavaを使用すると、次のように昇順を保証できます。
Guava (Java ラムダと密接な関係があるため) がそのような場合に簡単な解決策を提供しないことは、私にとって奇妙です。もちろん、いくつかの支援メソッドを作成してラップすることはできますが、誰かが既にライブラリでそれを行っている可能性があります。それを行う最も簡単な方法はありますか?何かのようなもの: