令人费解的"reference to println is ambiguous"编译错误



如果我编译并运行以下类(使用Java SE 7,如果这很重要的话(,

class Foo {
    public static void main(String[] args) {
        System.out.println(true ? null : 42);
        // System.out.println(null);
    }
}

我得到以下输出

null

到目前为止,一切都很好。但是,如果我取消对main中的第二条语句的注释,我会得到一个编译错误:

Foo.java:5: error: reference to println is ambiguous, both method println(char[]) in PrintStream and method println(String) in PrintStream match
      System.out.println(null);
                  ^

如果的参数System.out.printlnnull,但如果参数是true ? null : 42,则不是?

表达式true ? null : 42的类型是Integer,因此应该调用System.println(Object)是明确的。

如果调用System.println(null),则有多个候选方法,编译器无法决定采用哪一个。

相关内容

  • 没有找到相关文章

最新更新