1. ホーム
  2. java

[解決済み] ラムダで何でも使えるノーポップ(NOP)のメソッドリファレンスはありますか?

2023-07-25 04:51:34

質問

変な質問ですが、Java8でLambdaの標準的なno-op(別名:null operation, null-pattern method, no-operation, do-nothing method)メソッドを参照する方法はありますか。

現在、私はあるメソッドを持っていて、それは例えば void foo(Consumer<Object>) と宣言して、それをノーオープンにしてあげたいのですが。

foo(new Consumer<Object>() { 
  public void accept(Object o) { 
    // do nothing 
  }
}

というようなことができるようにしたいところ。

foo(Object::null)

の代わりに のようなものは存在するのでしょうか?

マルチパラメータのメソッドでどのように動作するかは分かりませんが -- おそらくこれはJavaのラムダの欠陥でしょう。

どのように解決するのですか?

これは欠陥ではありません。

Javaにおけるラムダは機能的インターフェースのインスタンスです。 1 単一の抽象メソッド、またはSAMに簡略化することができます。

しかし、このSAMはまだ有効なプロトタイプを持つ必要があります。あなたの場合、ノートップの Consumer<T> という何もしない T .

やはり必要なのは Consumer<T> である必要があります。つまり、あなたが思いつく最小限の宣言は

private static final Consumer<Object> NOOP = whatever -> {};

とし NOOP を必要な箇所に使用します。