我正在使用Clojure的Java庫。圖書館食譜描述了作爲一個靜態方法如下:如何匹配Clojure中的Java方法簽名
List<String> myList = new ArrayList<String>();
// next, add values to list, then:
myResults = JavaClass.staticMethod(myList);
起初,我以爲我將能夠通過執行以下操作使用來自Clojure的方法:
(-> ["vector" "of" "strings"]
java.util.ArrayList.
JavaClass/staticMethod)
但是當我做這我得到錯誤消息「CompilerException java.lang.IllegalArgumentException:沒有匹配的方法:staticMethod」。
我可以看到我做錯的唯一的事情是,在食譜示例中,ArrayList被聲明爲類型List,儘管ArrayList實現了List接口,但我並沒有在Clojure代碼中明確地做到這一點。我的Java-fu沒有那麼強大,所以我正確理解Java中的方法簽名是如何工作的?
編輯:作爲以下答案之一,所提到的方法是可變的。它的形式是
public static List<String> staticMethod(List<String> args, Object... moreArgs) {
...
}
有了'JavaLibrary/staticMethod',你的意思是'JavaClass/staticMethod',其中'JavaClass'屬於'JavaLibrary'嗎? – MicSokoli
@MicSokoli完全正確。正式編輯。 – patabongo