В My Clojure-code я хотел бы сгенерировать класс-файл, содержащий статический метод (с именем staticMethod
), который позже вызывается в статическом контексте из Java-программы.Как сгенерировать статические методы с Gen-классом clojure?
Я попытался (Clojure):
(ns com.stackoverflow.clojure.testGenClass
(:gen-class
:name com.stackoverflow.clojure.TestGenClass
:prefix "java-"
:methods [
[#^{:static true} staticMethod [String String] String]
]))
(def ^:private pre "START: ")
(defn #^{:static true} java-staticMethod [this text post]
(str pre text post))
и (Java):
package com.stackoverflow.clojure;
public class TestGenClassTest {
private TestGenClassTest() {
}
public static void main(String[] args) {
TestGenClass.staticMethod("Static call from Java!", " :END");
}
}
На https://kotka.de/blog/2010/02/gen-class_how_it_works_and_how_to_use_it.html Я читаю:
Добавляя метаданные - через #^{: статический true} - к объявлению метода вы также можете определить статические методы.
Независимо от того, где я поставил #^{:static true}
компилятор Java всегда говорит:
Не удается сделать статическую ссылку на нестатической метод STATICMETHOD (String, String) от типа TestGenClass
Как определить статические методы в Clojure? Будет #^{:static true}
и ^:static
означает то же самое? Где это документировано?
Где именно вы пытались поместить метаданные? Ответ BTW на ваш последний вопрос прост: http://clojure.org/metadata –
Сначала в ': methods'-part': gen-class' и Second в определении функции ('defn'). – Edward
OK --- если единственный способ, которым вы это пробовали, - это то, как заявляется ваш текущий вопрос, а затем попробуйте следующее: ': methods [^: static [staticMethod [String String] String]]' –