Java 如何将双冒号运算符转换为clojure?
我发现了一种新的java 8语法,通过阅读我试图讨论的框架:Java 如何将双冒号运算符转换为clojure?,java,clojure,Java,Clojure,我发现了一种新的java 8语法,通过阅读我试图讨论的框架: Runtime.getRuntime().addShutdownHook(new Thread(Sirius::stop)); 在clojure中,我可以将其翻译为: (.addShutdownHook (Runtime/getRuntime) (Thread. ????)) 但是我不知道该为放什么? IFn扩展了Runnable,所以您可以 #(Sirius/stop) 值得注意的是 你必须做兰姆达。Clojure不会让你
Runtime.getRuntime().addShutdownHook(new Thread(Sirius::stop));
在clojure中,我可以将其翻译为:
(.addShutdownHook (Runtime/getRuntime) (Thread. ????))
但是我不知道该为放什么?
IFn扩展了Runnable,所以您可以
#(Sirius/stop)
值得注意的是
- 你必须做兰姆达。Clojure不会让你把它当作
Sirius/stop
- Java8功能接口通过只使用一种方法匿名实现接口而工作。所以 新线程(天狼星::停止)
new Thread(new Runnable {
public void run() {
Sirius.stop();
}
})
如果所讨论的接口不可运行/可调用,则必须使用reify宏。@george simms给出了正确的解释,但对于正在寻找一个不可运行的示例,并且需要使用
reify
/的人来说,这里就是它
假设您想使用如下的DateTimeFormatter
parse
方法:
DateTimeFormatter dtf=DateTimeFormatter.ISO_LOCAL_DATE();
localdated=dtf.parse(“2019-04-04”,LocalDate::from);
您需要检查parse
的第二个参数的功能接口类型,在我们的例子中是TemporalQuery
。这意味着,您需要将
具体化临时查询
,并实现其唯一的方法(功能接口总是只有一个方法),以便它从LocalDate类上的调用静态方法。因此,在Clojure中,它也可以翻译为:
(导入“java.time.format.DateTimeFormatter”)
(导入“java.time.temporal.TemporalQuery”)
(导入“java.time.LocalDate”)
(让[dtf(DateTimeFormatter/ISO_LOCAL_DATE)]
(.解析dtf“2019-04-04”
(具体化临时查询)
(从[这个时态]
(LocalDate/from-temporal(()())))
可能会重复您是认真的吗?我看了一下答案,它们没有回答我需要在?
“双冒号”=静态方法中输入的内容。(Thread.#(Sirius/stop))
应该可以工作,它只是一个静态方法。@Havenard双冒号并不意味着静态方法。它是一个Java8方法句柄(在本例中是一个静态方法)。方法句柄(类似于函数指针)意味着您可以提供稍后调用的方法(在本例中,当Thread.start()
为called@zcaudate那么你能把选票/分数提高到正确吗