如何在Clojure中调用Java静态方法?

36

我希望调用String类的静态方法,该如何访问?

4个回答

53
你可以使用 (ClassName/methodName arguments) 调用静态方法。
然而,class 不是静态方法,它是Java的一个关键字,在Clojure中不需要它。要获取与String类相关联的Class对象,只需使用String

24

一个例子胜过千言万语:

(. String (valueOf 1))

如果我有一个类的实例但没有类名本身,我如何调用静态方法?(. (class my-instance) staticMethod 10)。我会收到一个错误消息“在类java.lang.Class中找不到匹配的方法staticMethod,需要1个参数”,即使(class my-instance)没有返回java.lang.Class。 - Joel M

7

我认为你的问题已经得到了回答,但如果你真的想要获取未知对象的类,可以使用class函数:

> (class "Foo")
java.lang.String

与Java相同,要指定java.lang以外的类作为字面量,您需要导入它们或使用点(.)分隔符指定完整的包+类名。


6

Class没有"类"方法,也没有"class"成员。如果你想得到Java中的String.class相当的东西,那么符号String被映射到类java.lang.String。如果你想调用String类的静态方法,语法是(String/methodName arg1 arg2)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接