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

欢迎!请参阅关于页面以了解更多关于此信息的工作方式。

0 投票
Java互操作

我对Clojure是个新手。我想调用一个Java方法,这个方法在Java中是重载的,一个没有参数,另一个有一个参数。我想调用没有参数的方法,但是Clojure调用了一个带有参数的方法并抛出IllegalArgumentException。

如何从Clojure调用不带参数的Java方法?

1 答案

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

如果不传递参数,Clojure将调用不接收参数的那个。

谢谢。但在我的情况下,不幸的是方法调用没有选择正确的方法。我想这些方法定义在一个接口中。我使用[]作为dummy的参数调用了它,然后它就正常工作了。
by
JVM对参数数量要求非常严格。

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

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