有没有办法让toString
使用方法句柄生成的 lambda 可以理解?在 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
正如你所看到的,甚至没有一些 lambda 超类可以使用。
澄清
我不是在问我如何定义我自己的toString
,而是我如何确定这个 lambda 调用的类/方法。定义我自己的toString
会破坏使用 Java 8 lambdas 的全部目的,因为我需要做更多容易错字的工作才能获得一个像样的toString
. 我还不如只使用没有 lambdas 的自动化脚本。