好吧,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,因为您可以在任何方法中添加它们以帮助定义词法 sope。这种 API 设计风格被称为fluent , JMock测试库最好地展示了这种风格。
顺便说一句,如果这应该在 Java 中引入闭包,那就太荒谬了——语法太糟糕了。他们的 I/O 示例实际上让我大笑起来。试试斯卡拉!
编辑- 我相信这两个println
调用是相关的,因为第一个调用序列允许库捕获您作为参数传入的变量。这些可能在某些ThreadLocal
结构中被捕获。然后,当您调用(也可能是静态的)println
方法时,库将使用此捕获的数据在以后实际执行该行为。同样与测试相关的是,EasyMock 测试框架使用类似的机制(在后台使用 Java 代理)来捕获预期值。