varargs的Java编译错误

时间:2011-12-22 16:44:40

标签: java compilation variadic-functions

我使用以下方法创建了一个库:

protected static int foo(String strParam, Object... params)

我将这个库链接到我的应用程序,然后调用方法:

foo("a","b")

但它没有编译,我收到以下错误消息: 实际参数String无法通过方法调用转换转换为Object []。

任何想法?

2 个答案:

答案 0 :(得分:3)

适合我:

public class XXX extends Lib {
    public static void main(String[] args) {
        foo("a", "b");
    }
}

class Lib{
    protected static int foo(String str, Object... args) {
        return 42;
    }
}

所以:

  • 您使用的JDK版本是什么?
  • 您使用的Java的源/类版本是什么?低于“5”的任何东西都是无用的。
  • 是否有其他方法称为foo某处(即重载方法)?
  • 您确定不会对旧版本的代码“链接”(对您而言意味着什么)吗?

答案 1 :(得分:0)

方法是protected。调用是在同一个包中的类中还是在子类中发生的?如果不是,则呼叫者无法看到foo的此定义。我不明白为什么它会导致那个特定的错误。这可能是编译器试图将其与不同方法签名匹配的证据。

您的通话真的只是foo( ... )吗?我希望看到包含类的名称,因为它是一个静态方法 - 即LibraryClass.foo( ... )。如果您没有限定方法名称,那么它应该在本地类范围内查找匹配的声明。