Clojure 2024 状态调查!中分享您的想法。

欢迎!请参阅关于 页面,了解更多关于此如何工作。

0
Java 互操作

我是 Clojure 的入门者。我想调用一个在 Java 中重载的方法,一个没有参数,另一个有一个参数。我想调用无参数的方法,但 Clojure 调用带有一个参数的方法并引发 IllegalArgumentException。

我如何在 Clojure 中调用无参数的 Java 方法?

1 个答案

+1
user=> (vec (.getBytes "ᵶ" "latin1"))
[63]
user=> (vec (.getBytes "ᵶ"))
[-31 -75 -74]
user=>

如果您没有传递任何参数,Clojure 会调用不接受参数的方法。

谢谢。但在我的情况下,遗憾的是方法调用没有选择正确的方法。我认为这些方法是在一个接口中定义的。我使用了一个空的数组 [] 作为参数调用 dummy,并且它成功了。
by
JVM对参数数量要求非常严格。

你不能调用带有错误参数数量的方法,所以如果你添加了一个参数现在它工作了,这意味着你正在调用不同的方法(一个方法的参数数是方法标识的一部分)。

还有其他因素会影响方法的选择,比如正确参数数量的方法不可见(不是公开的)。
...