看起来将clojure库api暴露给Java代码需要使用AOT编译(至少当暴露的api是OO时)。如果我错了,我很高兴能够修改。在过去,AOT存在多个问题,因此依赖它可能看起来有点鲁莽或不稳定。
目前的状况是什么? 这是安全的做法吗?
您是否会将其用作向Java应用程序公开OO api的方法?
答案 0 :(得分:3)
您可以使用AOT生成将作为Java库传递的字节码。但对于您或Java程序员来说,这并不是非常令人愉快,他们会理所当然地问:JavaDoc在哪里?你为什么使用Object而不是泛型?和其他类似的尴尬问题。
相反,我首选的方法是不要让Clojure代码对Java友好。将它暴露为普通的Clojure变量,就是这样。然后,在同一个库中自己编写一些Java代码,这些代码使用基于Clojure的API,并根据您想要的任何Java构造重新打包它。
有关一个示例,请参阅我的thrift-gen库。从Clojure中使用它,你得到一个函数,它将一个map作为输入并产生一个序列;从Java中使用它,您将获得用于配置而不是地图的构建器模式,并且您将获得List<? extends T>
作为输出。没有JavaDoc,因为我觉得自述文件中的使用文档已经足够了,但如果我认真使用它,那么有一个真正的.java源文件可以轻松地添加JavaDoc。