【问题标题】:Groovy method reference for multiple instances多个实例的 Groovy 方法参考
【发布时间】:2016-01-15 16:34:44
【问题描述】:

我正在从 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));

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

我可以将Bean.&amp;method 替换为{bean -&gt; bean.method},并且效果很好。在 Java 中,Bean::method 实际上是 bean -&gt; bean.method 的别名类型。

【问题讨论】:

  • AFAIK 这是不可能的。仅适用于静态方法。
  • @Opal 这不鼓励我使用 Groovy 来做我当时正在做的事情:/
  • 也许能给我们一个更广泛的背景?
  • 我用使用更新了我的问题。
  • 我认为您应该发布您的解决方案作为答案。看起来不错。你也可以选择{ it.method }

标签: groovy easybind


【解决方案1】:

你可以使用:

MethodClosure f = { it.method }
String s = f()

【讨论】:

    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多