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