【发布时间】:2016-07-02 16:26:48
【问题描述】:
我正在使用 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: No matching method: 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 非常正确。适当编辑。