我正在尝试调用在Java类上不带参数的方法,但是当我这样做时,我会得到反射警告,说“无法解析对[fieldName]字段的引用”。
根据这篇关于Java interop(http://clojure.org/java_interop)的Clojure文档,“实例成员表单适用于字段和方法。”我怎么能告诉它我想要一个方法?它似乎假设因为我没有传递args,我想要一个字段。
答案 0 :(得分:2)
如果同时存在字段和方法,则(.member instance)
表单将调用该方法(更常见)。如果要强制访问该字段,(.-field instance)
表单将仅检索字段值。
如果您的示例没有按预期工作,那么查看代码或错误会很有帮助。
在某些情况下,如果Clojure编译器无法找到该方法(通过未知的实例类或参数类型),则错误消息将指示它正在查找字段,但这只是订单的工件&# 39;评估选项。有时打开反射警告将有助于更好地查明问题。
答案 1 :(得分:0)
这是一个例子。它创建了一个Java类 - StringBuilder,用字符串初始化。然后在其上调用一个没有参数的方法 - reverse - 并通过调用toString方法将结果转换为String。
user=> (def sb (java.lang.StringBuilder. "Hello World"))
;; #'user/sb
user=> (.toString (.reverse sb))
;; "dlroW olleH"
user=> (.toString (.reverse sb))
;; "Hello World"
user=>
StringBuilder对象是可变的,因此它保持其状态,因此,第二个反向回滚第一个。这不是很像Clojure,因此必须谨慎使用。