我正在尝试使用一个使用Java类和方法的注解的Java库,所以我传递给它带有注解方法的deftype。其中一些注解需要使用整型参数,这在Clojure中似乎没有方便的方法来做。我尝试的代码类似于这样
(deftype SomeType []
(^{Retention RetentionPolicy/RUNTIME
SomeAnnotationClass {:order 1} }
someMethod [_]...))
:order 1
这部分引发了异常
在注解元素中发现数据类型错误...(找到类型为java.lang.Long[1]的数据)
这是因为Java库期望:order
有一个java.lang.Integer值的类型,而Clojure创建了一个java.lang.Long。如果我用(int 1)代替1,我会得到另一个异常。
我曾在clojurians Slack上寻求帮助,有人建议我使用#java.lang.Integer[1]
而不是简单地使用1。这管用,但有一个更直观的方法来做这个会更好。