我发现了一个新的java语法,通过source读取我试图纠缠的框架:
Runtime.getRuntime().addShutdownHook(new Thread(Sirius::stop));
在clojure中,我可以将其翻译为:
(.addShutdownHook (Runtime/getRuntime) (Thread. ????))
但我不确定要为???
答案 0 :(得分:4)
IFn扩展了Runnable,所以你可以做到
#(Sirius/stop)
值得注意的是
Sirius/stop
引擎盖下的Java 8功能接口通过仅使用一种方法进行接口的匿名实现。所以
new Thread(Sirius :: stop)
只是
的语法糖new Thread(new Runnable {
public void run() {
Sirius.stop();
}
})
如果相关界面不是Runnable / Callable,则您必须使用reify宏。
答案 1 :(得分:0)
@ george-simms的解释正确,但是对于任何正在寻找非Runnable
/ Callable
且需要使用reify
的示例的人,此处为
假设您要使用DateTimeFormatter
parse
这样的方法:
DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE();
LocalDate d = dtf.parse("2019-04-04", LocalDate::from);
您需要检查parse
第二个参数的功能接口类型,在我们的例子中为TemporalQuery
。也就是说,您需要reify
TemporalQuery
并实现其唯一方法(功能接口始终只有一个方法),以便它在{{1}上调用静态方法from
}类。因此,在Clojure中,它也可以翻译:
LocalDate