你如何从Clojure中调用我自己的Java类中的静态方法?

时间:2016-06-17 13:16:35

标签: java clojure

我想在我从Clojure创建的Java类中调用静态方法。我该怎么做?

我到目前为止所尝试的只是在与我的Clojure源相同的文件夹中创建一个Java类,但是我得到了一个ClassNotFoundException,或者我被告知没有这样的命名空间。我还尝试以各种不同的方式导入类,最后重复多次重新定义Java包声明,没有进一步的结果。

我正在使用Leiningen处理我的Clojure项目。

1 个答案:

答案 0 :(得分:2)

您还必须在项目的project.clj文件中提供有关Java类位置的信息。

以下是一个例子。

Java类:

public class BestClass {
    public static String testThis() {
        return "Hello";
    }
}

此类位于use-java\src\java,其中use-java是项目目录。

project.clj

(defproject use-java "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.8.0"]]
  :java-source-paths ["src/java/"]
  :main ^:skip-aot use-java.core
  :target-path "target/%s"
  :profiles {:uberjar {:aot :all}})

上述文件中的重要部分是:java-source-paths ["src/java/"]

请注意,您可以更改类的位置,但是:必须相应地更改java-source-paths。

core.clj

(ns use-java.core
  (:import BestClass))

(defn try-out-java-method []
  (BestClass/testThis))

致电try-out-java-method给出:

use-java.core> (try-out-java-method)
"Hello"