2014-10-17 12 views
5

My Clojure kodunda Statik bir yöntem (staticMethod olarak adlandırılır) içeren bir sınıf dosyası oluşturmak isterim. Bu, daha sonra Java programından statik bir bağlamda çağrılır. https://kotka.de/blog/2010/02/gen-class_how_it_works_and_how_to_use_it.html günüClojure’ın Gen sınıfı ile nasıl statik yöntemler üretilir?

package com.stackoverflow.clojure; 

public class TestGenClassTest { 

    private TestGenClassTest() { 
    } 

    public static void main(String[] args) { 
     TestGenClass.staticMethod("Static call from Java!", " :END"); 
    } 
} 

okudum:

meta ekleyerek - #^{aracılığıyla:

(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)) 

ve (Java):

I (Clojure) çalıştı statik true} - bir yöntem beyanına da statik yöntemleri tanımlayabilirsiniz.

Java derleyici her zaman söylediği #^{:static true} koymak olursa olsun:

türünden statik olmayan yöntem durukyöntem statik bir referans (dize, String) Gelemeyenler TestGenClass

Clojure'daki statik yöntemleri nasıl tanımlarım? #^{:static true} ve ^:static'un anlamı nedir? Bu nerede belgelenmiştir?

:methods [^:static [staticMethod [String String] String] ] 

öz ifadeler Bu tür Clojure belgelerin ne yazık ki tipik: Kotka yöntemini beyanı açıklama için bahsedilen zaman

+1

Meta verileri tam olarak nereye koymaya çalıştınız? Son soruya BTW cevabı kolaydır: http://clojure.org/metadata –

+0

İlk: '' method'-kısmında '' gen-class' 've ikincisi fonksiyon tanımında ('defn'). – Edward

+1

Tamam --- denediğin tek yol, geçerli soru durumun yolunu buluyorsa, sonra şunu deneyin: ': yöntemler [^: statik [statikMethod [Dize Dize] Dize]]' –

cevap

9

, o "obviosly" beyanı tutan bütün vektör anlamına geliyordu.

İlgili konular