我知道你的意思,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支持。 –