5

在我的 Clojure 代码中,我想生成一个包含静态方法(名为staticMethod)的类文件,稍后在 Java 程序的静态上下文中调用该方法。

我试过(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我读到:

通过将元数据(通过#^{:static true})添加到方法声明中,您还可以定义静态方法。

无论我把#^{:static true}Java 编译器放在哪里,Java 编译器总是说:

无法从类型 TestGenClass 对非静态方法 staticMethod(String, String) 进行静态引用

如何在 Clojure 中定义静态方法?会#^{:static true}^:static意思一样吗?这是在哪里记录的?

4

1 回答 1

10

当 kotka 说要注释方法声明时,他“显然”是指包含声明的整个向量

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

不幸的是,这种简洁的措辞是 Clojure 文档的典型特征。

于 2014-10-17T13:35:27.697 回答