Je sais ce que vous entendez, le code groovy call a closure comme ceci:
def code = { 123 };
//can be called like any other method if the variable is a closure.
assert code() == 123;
//can be call explicitly by using `call` method
assert code.call() == 123;
code javascript call a function comme ceci:
let code =() => 123;
//can be called like any other function if the variable is a function.
assert code() == 123;
//can be call explicitly by using `call` method
assert code.call() == 123;
Mais je peux vous dire java Gammar pas en charge cette fonctionnalité pour les champs/variables, peut-être dans le prochain jdk sera activer cette fonctionnalité dont un champ/variable se référer à Callable.
Heureusement, Single-Static-Import Declarations soutient appeler une méthode directement si le membre statique est une méthode, par exemple:
import static java.lang.Math.abs;
assert abs(-1) == 1;
Si vous voulez vraiment faire un identifiant appelé comme un appel de méthode, vous pouvez faux quelque chose comme ceci:
class ApiFactory {
public static Func1<MyEvent, Observable<Data>> getDataOnEvent = new Func1<MyEvent, Observable<Data>>() {
public Observable<Data> call(MyEvent event) {
return ApiFactory.get().getData();
}
};
public static Observable<Data> getDataOnEvent(MyEvent event) {
return getDataOnEvent.call(event);
}
}
vous pouvez appeler comme ceci:
import static ${package}.ApiFactory.getDataOnEvent;
// which is calling a static method
result = getDataOnEvent(event);
// which is calling a static field
result = getDataOnEvent.call(event);
Ce type de fonctionnalité est pris en charge dans les fermetures de Groovy, mais je ne peux pas penser à quoi que ce soit où il est pris en charge en Java. – Brian
Vous pouvez créer une méthode contenant l'appel, mais je pense que ce n'est pas vraiment ce que vous voulez – SilverNak
Également supporté par Kotlin. –