2014-10-17 3 views
5

В My Clojure-code я хотел бы сгенерировать класс-файл, содержащий статический метод (с именем staticMethod), который позже вызывается в статическом контексте из Java-программы.Как сгенерировать статические методы с Gen-классом clojure?

Я попытался (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)) 

и (Java):

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 Я читаю:

Добавляя метаданные - через #^{: статический true} - к объявлению метода вы также можете определить статические методы.

Независимо от того, где я поставил #^{:static true} компилятор Java всегда говорит:

Не удается сделать статическую ссылку на нестатической метод STATICMETHOD (String, String) от типа TestGenClass

Как определить статические методы в Clojure? Будет #^{:static true} и ^:static означает то же самое? Где это документировано?

+1

Где именно вы пытались поместить метаданные? Ответ BTW на ваш последний вопрос прост: http://clojure.org/metadata –

+0

Сначала в ': methods'-part': gen-class' и Second в определении функции ('defn'). – Edward

+1

OK --- если единственный способ, которым вы это пробовали, - это то, как заявляется ваш текущий вопрос, а затем попробуйте следующее: ': methods [^: static [staticMethod [String String] String]]' –

ответ

9

Когда Котка сказал аннотирования метод декларации, он «obviosly» означает весь вектор проведение объявление:

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

Этот вид лаконичной формулировки, к сожалению, характерно для Clojure документации.

 Смежные вопросы

  • Нет связанных вопросов^_^