toString
メソッドハンドルで生成されたラムダを理解できるようにする方法はありますか? Java 8 より前のFunction
バージョンでは、Guava のインターフェースを使用しており、多くのデータ クラスの関数を生成するスクリプトを作成しました。また、クラスとメソッドを明確に識別できるも含めましたtoString
。たとえば、「MyItem::getPrice」です。
しかし、Java 8 では、関数の宣言ははるかに簡単になりましたが、関数が何であるかを特定する方法がなくなりました。nice の最も重要な理由はtoString
デバッグ目的ですが、他にもあると確信しています。この情報がリフレクションで利用できればいいのですが、明らかにそうではありません。
このコード スニペット
Function<String,Integer> func = "ABS"::indexOf;
System.out.println(func);
System.out.println(func.getClass());
System.out.println(func.getClass().getSuperclass());
生産する
com.github.jkstrauss.kavve.test.common.TestLambda$$Lambda$1/918221580@5ca881b5
class com.github.jkstrauss.kavve.test.common.TestLambda$$Lambda$1/918221580
class java.lang.Object
ご覧のとおり、操作するラムダ スーパークラスさえありません。
明確化
独自の を定義する方法を尋ねているのではなくtoString
、このラムダが呼び出しているクラス/メソッドを特定する方法を尋ねています。自分で定義すると、 toString
Java 8 ラムダを使用する目的全体が無効になります。適切なtoString
. ラムダなしで自動化されたスクリプトを使用することもできます。