Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将双冒号运算符转换为clojure?_Java_Clojure - Fatal编程技术网

Java 如何将双冒号运算符转换为clojure?

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不会让你

我发现了一种新的java 8语法,通过阅读我试图讨论的框架:

 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那么你能把选票/分数提高到正确吗