Java 如何使用clojure'生成静态方法;s级?
在我的Clojure代码中,我想生成一个包含静态方法(名为Java 如何使用clojure'生成静态方法;s级?,java,clojure,static,static-methods,gen-class,Java,Clojure,Static,Static Methods,Gen Class,在我的Clojure代码中,我想生成一个包含静态方法(名为staticMethod)的类文件,该方法稍后由Java程序在静态上下文中调用 我试过(Clojure): 和(爪哇): 我读到: 通过向方法声明中添加元数据(通过#^{:static true}) 您还可以定义静态方法 无论我把#^{:static true}放在哪里,Java编译器总是说: 无法对非静态方法进行静态引用 TestGenClass类型中的staticMethod(String,String) 如何在Clojure中定义静
staticMethod
)的类文件,该方法稍后由Java程序在静态上下文中调用
我试过(Clojure):
和(爪哇):
我读到:
通过向方法声明中添加元数据(通过#^{:static true})
您还可以定义静态方法
无论我把#^{:static true}
放在哪里,Java编译器总是说:
无法对非静态方法进行静态引用
TestGenClass类型中的staticMethod(String,String)
如何在Clojure中定义静态方法?
#^{:static true}
和^:static
的意思是否相同?这是在哪里记录的?当kotka说要注释方法声明时,他“显然”是指包含声明的整个向量:
:methods [^:static [staticMethod [String String] String] ]
不幸的是,这种简洁的措词是Clojure文档的典型特征。您究竟尝试将元数据放在哪里?顺便说一句,你最后一个问题的答案很简单:好吧——如果你唯一尝试过的方法是你当前问题的陈述方式,那么试试以下方法:
:methods[^:static[staticMethod[String]String]]
试着按照我在上面的评论中指定的注释:不是符号,而是向量。实际上,开头的句子是这样说的“符号和集合支持元数据”。不,这意味着符号和集合都可以包含元数据。您只需要注意用元数据注释的内容。当您说(meta m)时
,您查询的是m
引用的对象的元数据,而不是符号m
。这是因为只有m
计算的是集合,而不是符号。
package com.stackoverflow.clojure;
public class TestGenClassTest {
private TestGenClassTest() {
}
public static void main(String[] args) {
TestGenClass.staticMethod("Static call from Java!", " :END");
}
}
:methods [^:static [staticMethod [String String] String] ]