我发现了Java 8的一种新语法,该语法通过source读取了我正在尝试纠缠的框架:

 Runtime.getRuntime().addShutdownHook(new Thread(Sirius::stop));

在Clojure中,我可以将其翻译为:
(.addShutdownHook (Runtime/getRuntime) (Thread. ????))

但是我不确定应该为???输入什么

最佳答案

IFn扩展了Runnable,因此您可以执行

#(Sirius/stop)

值得一提的是
  • 您必须制作lambda。 Clojure不会像Sirius/stop
  • 那样引用它
  • 引擎盖下的Java 8功能接口(interface)通过仅使用一种方法对接口(interface)进行匿名实现而起作用。所以

    新线程(Sirius::stop)

  • 只是语法糖
    new Thread(new Runnable {
        public void run() {
            Sirius.stop();
        }
    })
    

    如果有问题的接口(interface)不是Runnable/Callable,则必须使用reify宏。

    关于java - 如何将双冒号运算符转换为clojure?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29179512/

    10-08 20:35