Ну, 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. Используя статический импорт, привет presto:
import static Fac.*;
of(System.out).println(var(String.class));
Фигурные скобки, очевидно, являются допустимыми Java, так как вы можете добавить их в любой метод, чтобы помочь в определении лексической ссылки. Этот стиль разработки API называется свободно и лучше всего демонстрируется библиотекой тестирования JMock .
Кстати, если предполагается ввести замыкания в Java, это довольно смешно - синтаксис нечитаемо ужасен . Их пример ввода / вывода на самом деле заставил меня смеяться вслух. Попробуйте Scala !
EDIT - два вызова println
связаны, я полагаю, потому что первая последовательность вызовов позволяет библиотеке захватывать переменные, которые вы передали в качестве параметров. Они, вероятно, зафиксированы в некоторой структуре ThreadLocal
. Когда вы затем вызываете (также предположительно статический) метод println
, библиотека использует эти захваченные данные для фактического выполнения поведения на более позднем этапе. Кроме того, в тестовой среде EasyMock используется аналогичный механизм (использующий прокси-серверы Java в фоновом режиме) для сбора ожидаемых значений.