我知道你的意思,Groovy代码call a closure这样的:
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;
JavaScript代码call a function这样的:
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;
但我可以告诉你java的gammar不支持此功能的领域/变量,也许在下一个jdk中会启用这个功能,其中一个字段/变量指的是Callable。
幸运的是,Single-Static-Import Declarations支持调用一个方法直接,如果静态成员是一个方法,例如:
import static java.lang.Math.abs;
assert abs(-1) == 1;
如果你真的想叫像一个方法调用的标识符,可以假是这样的:
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);
}
}
那么你可以这样调用:
import static ${package}.ApiFactory.getDataOnEvent;
// which is calling a static method
result = getDataOnEvent(event);
// which is calling a static field
result = getDataOnEvent.call(event);
这种功能在Groovy的闭包中得到了支持,但我想不出任何在Java中本地支持的功能。 – Brian
您可以创建一个包含该调用的方法,但我认为这不是您想要的 – SilverNak
还受Kotlin支持。 –