【问题标题】:Why these varargs methods (which work fine in Java 6) are ambiguous in Java 8 [duplicate]为什么这些可变参数方法(在 Java 6 中可以正常工作)在 Java 8 中是模棱两可的 [重复]
【发布时间】:2016-08-30 17:26:14
【问题描述】:

此代码可在 Java 6 (IBM Java 6) 中编译和运行,但不能在 Java 8(IBM Java 8 和 Eclipse 的内置编译器)中编译:

public class App {
    public static void main(String[] args) {
        App app = new App();
        app.test(true, new Object());
    }

    void test(boolean b, Object... objects) {
    }

    void test(Object... objects) {
    }
}

编译错误是:

The method test(boolean, Object[]) is ambiguous for the type App

我在将实际应用程序从 Java 6 迁移到 Java 8 时发现了这个问题。这段代码对我来说看起来不错,因为当 Java 在重载方法中进行选择时,可变参数方法通常用作最后的手段。

这里有什么问题?

【问题讨论】:

  • 您需要IBM Java版本,还是您尝试过Oracle版本?
  • 我的带有 Java 8 的 Eclipse 对这些声明很好。
  • @AlexK。我的不是。
  • @Tom 我没有尝试 Oracle Java。
  • 你会在这里找到解释:stackoverflow.com/questions/7689386/…

标签: java java-8


【解决方案1】:

我认为这是因为Object 类型。编译器认为 boolean 参数是 Object 的子类(可能是因为自动装箱?),因此将其视为另一个 vararg。

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2015-03-08
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多