मेरा क्लोजर-कोड में मैं एक क्लास-फाइल जेनरेट करना चाहता हूं जिसमें एक स्थिर विधि (नाम staticMethod
) है, जिसे बाद में जावा-प्रोग्राम से स्थिर संदर्भ में बुलाया जाता है।क्लोजर के जेन-क्लास के साथ उत्पन्न स्थिर तरीके कैसे उत्पन्न करें?
मैंने कोशिश की (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))
और (जावा):
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 पर मैंने पढ़ा:
मेटाडाटा को जोड़ कर - #^{के माध्यम से: स्थिर सच} - एक विधि घोषणा पर आप स्थैतिक तरीकों को भी परिभाषित कर सकते हैं।
कोई फर्क नहीं पड़ता है जहाँ मैं #^{:static true}
डाल जावा कम्पाइलर हमेशा कहते हैं:
प्रकार से गैर स्थैतिक विधि staticMethod करने के लिए एक स्थिर संदर्भ (स्ट्रिंग, स्ट्रिंग) नहीं बना सकता TestGenClass
क्लोजर में स्थिर तरीकों को कैसे परिभाषित किया जा सकता है? #^{:static true}
और ^:static
का मतलब वही होगा? यह दस्तावेज कहां है?
:methods [^:static [staticMethod [String String] String] ]
संक्षिप्त शब्दों इस तरह की Clojure प्रलेखन का दुर्भाग्य खासियत है:
आपने मेटाडेटा को कहां रखा है? आपके अंतिम प्रश्न का बीटीडब्लू उत्तर आसान है: http://clojure.org/metadata –
पहले ''विधियों' में भाग- 'जीन-क्लास' का हिस्सा और फ़ंक्शन की परिभाषा में दूसरा (' defn')। – Edward
ठीक --- यदि आपके द्वारा आजमाया गया एकमात्र तरीका यह है कि आपका वर्तमान प्रश्न कहता है, तो निम्न का प्रयास करें: ': विधियों [^: स्थिर [staticMethod [स्ट्रिंग स्ट्रिंग] स्ट्रिंग]] ' –