W kodzie My Clojure chciałbym wygenerować plik klasy zawierający statyczną metodę (o nazwie staticMethod
), która później jest wywoływana w statycznym kontekście z programu Java.Jak wygenerować wygenerować statyczne metody z klasą klasy clojure?
próbowałem (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))
i (Java):
package com.stackoverflow.clojure;
public class TestGenClassTest {
private TestGenClassTest() {
}
public static void main(String[] args) {
TestGenClass.staticMethod("Static call from Java!", " :END");
}
}
Na https://kotka.de/blog/2010/02/gen-class_how_it_works_and_how_to_use_it.html czytam:
Dodając metadane - poprzez #^{: static true} - do deklaracji metody można również zdefiniować metody statyczne.
Bez względu na to gdzie mogę umieścić #^{:static true}
kompilator Javy zawsze mówi:
Nie można wykonać statyczny odniesienie do non-statycznej metody staticmethod (String, String) od rodzaju TestGenClass
Jak zdefiniować statyczne metody w Clojure? Czy #^{:static true}
i ^:static
oznaczają to samo? Gdzie jest to udokumentowane?
Gdzie dokładnie próbowałeś umieścić metadane? Odpowiedź BTW na ostatnie pytanie jest prosta: http://clojure.org/metadata –
Najpierw w ': methods'-część': gen-class' i Second w definicji funkcji ('defn'). – Edward
OK --- jeśli jedynym sposobem, w jaki wypróbowałeś to jest sposób, w jaki wpisuje się twoje bieżące pytanie, spróbuj wykonać następujące czynności: ': methods [^: static [staticMethod [String String] String]]' –