In meinem Clojure-Code möchte ich eine class-Datei generieren, die eine statische Methode (mit dem Namen staticMethod
) enthält, die später in einem statischen Kontext von einem Java-Programm aufgerufen wird.Wie generiere ich statische Methoden mit Clojures Gen-Klasse?
habe ich versucht (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))
und (Java):
package com.stackoverflow.clojure;
public class TestGenClassTest {
private TestGenClassTest() {
}
public static void main(String[] args) {
TestGenClass.staticMethod("Static call from Java!", " :END");
}
}
Auf https://kotka.de/blog/2010/02/gen-class_how_it_works_and_how_to_use_it.html Ich las:
von Metadaten hinzufügen - über #^{: static true} - Zu einer Methodendeklaration können Sie auch statische Methoden definieren.
Egal, wo ich die #^{:static true}
legte der Java-Compiler immer sagt:
Es kann keine statische Verweis auf die nicht-statische Methode Static (String, String) vom Typ machen TestGenClass
Wie kann ich statische Methoden in Clojure definieren? Würden #^{:static true}
und ^:static
dasselbe bedeuten? Wo ist das dokumentiert?
Wo genau haben Sie versucht, die Metadaten zu setzen? BTW Antwort auf Ihre letzte Frage ist einfach: http://clojure.org/metadata –
Zuerst im ': Methoden'-Teil von': gen-Klasse' und Zweite in der Definition der Funktion ('defn'). – Edward
OK --- wenn die einzige Art, wie Sie es versucht haben, ist die Art, wie Ihre aktuelle Frage besagt, dann versuchen Sie Folgendes: ': Methoden [^: statisch [staticMethod [String] String]] –