答えて
さて、あなたはメソッド呼び出しに定数を渡している場合、あなたは元のメソッドを呼び出す別のメソッドを作成することができます。
private static Integer getVal (Integer a) {
return getVal(1,2);
}
、あなたは第二の方法のためのメソッド参照を使用することができます。
すなわちそれはあまり意味がありません、と述べた
ClassName::getVal
に
a -> getVal(1, 2)
を変更することができます。
P.S.ラムダ式でa
の目的が何であるかはわかりません。あなたが無視しているからです。
一般に、指定されたメソッドのメソッド参照が、必要な機能インタフェースの1つのメソッドのシグネチャと一致する場合、それを渡すことができます。
例:
public static Integer apply (BinaryOperator<Integer> op, Integer a, Integer b)
{
return op.apply(a,b);
}
今、あなたが呼び出すことができます:あなたの元のメソッドを持つ
apply(ClassName::getVal)
を。
ありがとうございます。それは本当に問題です - 整数値をラムダに渡す方法:(val1、val2) - > getVal(val1、val2) – user1052610
@ user1052610これは、メソッド参照を渡す場所によって異なります。 2つの引数を持つメソッドを持つ関数インタフェースが必要なメソッドに渡す場合は、元のメソッドを渡すことができます。 – Eran
Map.computeIfAbsent()の2番目の引数に渡されています。だから私がしたいのはmap.computeIfAbsent( "xxx"、Class:getVal)です。 – user1052610
ここは例です。
interface Operator {
int operate(int a, int b);
}
class Calc {
public static int add(int a, int b) {
return a + b;
}
}
class Main {
public static void main(String[] args) {
// using method reference
int result = operate(1, 2, Calc::add);
// using lambda
int result = operate(1, 2, (a, b) -> Calc.add(a, b));
}
static int operate(int a, int b, Operator operator) {
return operator.operate(a, b);
}
}
メソッドリファレンス(この例ではOperator
)を使用するには、機能的なインターフェイスが必要です。また、関数インタフェースのインスタンスをそのオブジェクトとして受け入れるメソッドも必要です(この例ではoperate(int a, int b, Operator operator
)。
UPDATE
あなたがオブジェクトラッパーが必要な場合は、単に
static int operate(ObjectWrapper wrapper, Operator operator) {
return operator.operate(wrapper.getA(), wrapper.getB());
}
にoperate
方法を変更してoperate
メソッドを呼び出します。)
int result = operate(wrapper, Calc::add);
GETVALを(意志のみ適用可能なタイプiの機能インタフェースが存在する場所で、メソッド参照として使用可能このようBiFunctionやIntBinaryOperatorとして期待秒、または(zhhのanswerのように)カスタム機能インタフェース
例:
public static void main(String[] args) {
Integer result1 = calculate(1, 2, Second::getVal);
Integer result2 = calculateAsInt(1, 2, Second::getVal);
}
private static Integer getVal(Integer a, Integer b){
return a + b;
}
private static Integer calculate(Integer a, Integer b, BinaryOperator<Integer> operator) {
return operator.apply(a, b);
}
private static int calculateAsInt(int a, Integer b, IntBinaryOperator operator) {
return operator.applyAsInt(a, b);
}
- 1. Djangoモデル - 考える方法
- 2. 奇妙な行動コントローラにこの方法を考えるルート
- 3. は、このコードを考える
- 4. は、このテーブルを考えると.net4
- 5. は、このHTMLドキュメントを考えるExt.core
- 6. 次コントローラ方法を考えるASPNETMVC
- 7. ASP.NETページプロパティ良い考え方または悪い考え方
- 8. を考えると仕方
- 9. - このレイアウトを考えると、右
- 10. この表を考えるとSQL
- 11. Angular4:このコードを考えるとngFor
- 12. このモデルを考えると、レコード
- 13. それは方法を考える機能、オーバーロードのJava
- 14. 最初のショットでO(nlogn)ソリューションを考える方法は?
- 15. モードレスメッセージボックスをツールチップとして表示する方法の考え方
- 16. 実装方法についての考え方は?
- 17. データベースではなくデータストアで考える方法は?
- 18. 私のプロジェクトに関するこの「ブルートフォース」の考え方を避けるには?
- 19. Webフレームワークプログラミングの考え方
- 20. UITableView NSFetchedResultsControllerの考え方
- 21. *これは良い考えですか?
- 22. NHibernateはqueryこのNHibernateは、クエリを考える
- 23. Pythonはこのモジュール(sample.py)を考えると呼ばれるモジュール
- 24. Railsの - オブジェクトのプロパティは、このクラスを考えるとセッター
- 25. は、このマークアップとスタイルを考える親の残りのスペース
- 26. はどのようにこのHTMLを考えるとjQueryの
- 27. ローカル変数:プログラミングプラクティス次の方法を考える
- 28. 型セーフな方法で次のコード片を考える
- 29. mod_rewriteでの変更時刻(mtime)を考える方法
- 30. 方法次のシェルスクリプトを考えると、リダイレクトエラー
あなたがこれを必要としますと思いますなぜ? – shmosel