0

有没有办法让toString使用方法句柄生成的 lambda 可以理解?在 Java 8 之前,我一直在使用FunctionGuava 的接口,并创建了一个脚本,为我的许多数据类生成函数。我还包括一个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 的自动化脚本。

4

0 回答 0