4

我正在从 Java 迁移到 Groovy,并且遇到了方法引用问题。

在 Java 中,我可以这样做:

Function<Bean, String> f = Bean::method;
String s = f.apply(new Bean());

我想在 Groovy 中实现相同的功能。我试着做:

Function f = Bean.&method
Sting s = f.apply new Bean()

但我有一个例外,就f.apply行了:

groovy.lang.MissingMethodException: No signature of method: Bean.method() is applicable for argument types: (Bean) values: [Bean@17483c58]

我知道我可以执行以下操作来获取实例方法的方法引用,但我想获取任何实例的通用方法。

MethodClosure f = bean.&method
String s = f()

我想用它来使用 EasyBind 库。它允许您选择带有函数引用的 JavaFX 属性。您可能有一个类和属性的层次结构,要选择它们,您可以这样做:

property.bind(EasyBind.select(root).select(Root::branch).selectObject(Branch::leaf));

因此,当树中的任何值发生变化时,propertyget 会更新为正确的值。

我可以替换为Bean.&method并且{bean -> bean.method}效果很好。在 Java 中, theBean::method实际上是bean -> bean.method.

4

1 回答 1

2

您可以使用:

MethodClosure f = { it.method }
String s = f()
于 2016-01-15T17:17:40.673 回答