of
おそらく、静的にインポートされるメソッドstatic
であるため、クラス名を囲むことなく呼び出すことができます。var
私はそれが同じであることを期待しています。どちらのメソッドも、後で呼び出されるメソッドを持つ型を返す必要があります。
public class Printable {
public void println(Var var);
}
public class Fac {
public static Printable of(Object o) {
return new Printable(o);
}
public static Var var(Class<?> clazz) {
return new Var(clazz);
}
}
突然:
Fac.of(System.out).println(Fac.var(String.class));
有効な Java です。静的インポートを使用してください。
import static Fac.*;
of(System.out).println(var(String.class));
中括弧は明らかに有効な Java であり、これらを任意のメソッドに追加して字句 sope を定義するのに役立てることができます。この API 設計スタイルは流暢と呼ばれ、 JMockテスト ライブラリによって最もよく示されます。
ところで、これが Java にクロージャーを導入することになっているとしたら、それはまったくばかげています。彼らの I/O の例は、実際に私を大笑いさせました。スカラを試してみてください!
EDIT - 2 つのprintln
呼び出しが関連付けられていると思います。これは、呼び出しの最初のシーケンスにより、ライブラリがパラメーターとして渡した変数をキャプチャできるためです。これらはおそらく何らかのThreadLocal
構造に取り込まれています。次に、(おそらく静的な) メソッドを呼び出すとprintln
、ライブラリはこのキャプチャされたデータを使用して、後で実際に動作を実行します。テスト関連でも、EasyMock テスト フレームワークは同様のメカニズム (バックグラウンドで Java プロキシを使用) を使用して期待値を取得します。