【问题标题】:Java method overload choice [duplicate]Java方法重载选择[重复]
【发布时间】:2013-10-18 06:25:22
【问题描述】:

我在一个类中有两个方法...

public void method(String var1, String var2, Object var3) {
    //do stuff
}

public void method(String var1, String var2, Object[] var3) {
    //do stuff
}

当我进行以下调用时...obj.method("string", "string", obj) 会调用正确的方法,但是,当我尝试调用obj.method("string", "string", obj[]) 时,会调用该方法的第一个化身。

我可以给出任何注释或“提示”以确保调用我预期被调用的方法吗?我知道Object[]Object,但我希望在运行时Object[] 的方法会在Object 之前被调用。

【问题讨论】:

  • 这不应该发生。传递Object[] 将调用第二种方法。
  • 我无法重现您的问题。如果我使用Object 类型的引用,我将调用第一个版本的方法。如果我要使用Object[],则将调用第二种方法。
  • 删除第一种方法,并在您使用第一种方法的情况下传递一个元素的数组。
  • 您始终可以将第三个参数转换为Object[]
  • @ElGuapo 再次,我得到了预期的行为,即在传递字符串数组时调用 Object[] 的方法......对我有用。

标签: java


【解决方案1】:

不,对我来说,这按预期调用了第二种方法!

如果您希望一个被调用而不是另一个,那么您给出的提示通常是转换为该方法所期望的确切参数类型(这种转换甚至可以在null 上工作。)所以使用(Object)arr 将强制调用第一个方法,但默认情况下它肯定会调用第二个方法(无论如何,在所有正确版本的 JVM 上 - 与普遍的看法相反,这种情况在 JLS 中明确涵盖,因此不是模棱两可。)

【讨论】:

  • 确实,它必须调用语言规范的第二种方法。
  • This answer 也提供了很好的方法选择说明。
  • 我也完全没有遇到这种情况。
【解决方案2】:

在 Java 中,方法重载发生在编译期间。这意味着调用哪个方法是在程序编译期间决定的。请注意,这与方法覆盖不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    相关资源
    最近更新 更多