Java 编译错误与可变参数

发布于 2024-12-22 15:46:32 字数 263 浏览 0 评论 0原文

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

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

我将此库链接到我的应用程序并调用该方法:

foo("a","b")

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

有什么想法吗?

I created a library with the following method :

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

I link this library to my application and I call the method :

foo("a","b")

but it does not compile, I get the following error message :
actual argument String cannot be converted to Object[] by method invocation conversion.

any idea ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

攒眉千度 2024-12-29 15:46:32

对我有用:

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 的方法(即重载方法)?
  • 您确定您没有“链接”(无论这对您意味着什么)旧版本的代码吗?

Works for me:

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;
    }
}

So:

  • What JDK version are you using?
  • What source/class version of Java are you using? Anything below "5" is useless.
  • Are there other methods called foo somewhere (i.e. overloaded methods)?
  • Are you sure you don't "link" (whatever that means to you) against an old version of your code?
内心激荡 2024-12-29 15:46:32

该方法受保护。调用是发生在同一个包中的类中,还是发生在子类中?如果不是,调用者将无法看到 foo 的定义。但我不明白为什么它会导致该特定错误。这可能表明编译器正在尝试将其与不同的方法签名相匹配。

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

The method is protected. Is the call occurring in a class in the same package, or in a subclass? If not, the caller cannot see this definition of foo. I don't see why it would result in that particular error though. This might be evidence that the compiler is trying to match this up with a different method signature.

Is your call really just foo( ... )? I would expect to see the name of the containing class there, since it is a static method -- i.e. LibraryClass.foo( ... ). If you are not qualifying the method name, then it should be looking in the local class scope for a matching declaration.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文