Мигрирам от 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.&method
с {bean -> bean.method}
и това работи добре. В Java, Bean::method
всъщност е нещо като псевдоним bean -> bean.method
.
Отговори:
2 за отговор № 1Можеш да използваш:
MethodClosure f = { it.method }
String s = f()