我正在尝试使用一个使用Java类和方法的注解的Java库,所以我通过它传递带有注解方法的deftypes。其中一些注解需要使用整型参数,看起来在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。这成功了,但有一个更直观的方法就好了。