【问题标题】:Clojure :gen-class not working in Java appClojure :gen-class 在 Java 应用程序中不起作用
【发布时间】: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


    【解决方案1】:

    您的 clojure 文件中缺少类似的内容

    (defn -sq
      "A Java-callable wrapper around the 'sq' function."
      [n]
      (sq n))
    

    此外,您需要将方法定义为静态。

    我认为规范文档在这里:https://clojure.org/reference/compilation

    【讨论】:

    • 感谢您的回复-我用那次尝试更新了我的问题-似乎Java仍然不喜欢它:(
    • @AdamRackis 我认为它实际上应该是一个静态方法
    猜你喜欢
    • 2014-12-12
    • 2010-12-07
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多