【发布时间】:2017-05-24 16:01:05
【问题描述】:
这是我的 myns/junk.clj 文件
(ns myns.junk
(:gen-class
:name booklist.util
:methods [[sq [int] int]]))
(defn sq [x] (* x x))
我正在运行 lein ubserjar 没有问题。我已经在我的 java 应用程序中导入了生成的 jar,然后运行了这个
package javaapplication1;
import booklist.util;
public class JavaApplication1 {
public static void main(String[] args) {
util u = new util();
System.out.println(u.sq(45));
}
}
产生错误
线程“main”中的异常 java.lang.UnsupportedOperationException: sq (myns.junk/-sq 未定义?) 在 booklist.util.sq(未知来源) 在 javaapplication1.JavaApplication1.main(JavaApplication1.java:14) C:\Users\X750JA\AppData\Local\NetBeans\Cache\8.2\executor-sn-ps\run.xml:53:Java 返回:1 构建失败(总时间:0 秒)
我错过了什么,理想情况下,是否有任何可用的文档详细解释这些内容?
编辑,根据亚历杭德罗的回答,我试过这个
(ns myns.junk
(:gen-class
:name booklist.util
:methods [[sq [int] int]]))
(defn sq [x] (* x x))
(defn -sq
"A Java-callable wrapper around the 'sq' function."
[n]
(sq n))
现在会产生错误
线程“主”clojure.lang.ArityException 中的异常:传递给的 args (2) 数量错误:垃圾/-sq 在 clojure.lang.AFn.throwArity(AFn.java:429) 在 clojure.lang.AFn.invoke(AFn.java:36) 在 booklist.util.sq(未知来源) 在 javaapplication1.JavaApplication1.main(JavaApplication1.java:14) C:\Users\X750JA\AppData\Local\NetBeans\Cache\8.2\executor-sn-ps\run.xml:53:Java 返回:1 构建失败(总时间:0 秒)
我的结局是这样的
(ns myns.junk
(:gen-class
:name booklist.util
:methods [#^{:static true} [sq [int] int]]))
(defn -sq [x] (* x x))
(-sq 7) ; works - 49
所以看来我需要将该方法声明为静态,并将实际方法定义为在名称中包含前导破折号。
【问题讨论】:
标签: java clojure leiningen clojure-java-interop