2014-10-17 5 views
5

मेरा क्लोजर-कोड में मैं एक क्लास-फाइल जेनरेट करना चाहता हूं जिसमें एक स्थिर विधि (नाम 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 प्रलेखन का दुर्भाग्य खासियत है:

+1

आपने मेटाडेटा को कहां रखा है? आपके अंतिम प्रश्न का बीटीडब्लू उत्तर आसान है: http://clojure.org/metadata –

+0

पहले ''विधियों' में भाग- 'जीन-क्लास' का हिस्सा और फ़ंक्शन की परिभाषा में दूसरा (' defn')। – Edward

+1

ठीक --- यदि आपके द्वारा आजमाया गया एकमात्र तरीका यह है कि आपका वर्तमान प्रश्न कहता है, तो निम्न का प्रयास करें: ': विधियों [^: स्थिर [staticMethod [स्ट्रिंग स्ट्रिंग] स्ट्रिंग]] ' –

उत्तर

9

जब कोटका विधि टिप्पणी करने की घोषणा कहा, वह "obviosly" घोषणा पकड़े मतलब पूरे वेक्टर

संबंधित मुद्दे