令人困惑的 “reference to println is ambiguous”编译错误

2020年1月17日 8点热度 0条评论

This question already has answers here:
Returning null as an int permitted with ternary operator but not if statement

(8个答案)

5年前关闭。

如果我编译并运行以下类(使用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);
                  ^

如果Java编译器的参数,为什么Java编译器会引发此错误?
System.out.println
null,但是如果参数是
true ? null : 42,不是吗?

解决方案如下:

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

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

上一篇:dicom - OFFIS DICOM-dcmdump v3.6.0-(0002,0010)传输语法UID

下一篇:java - 打印 vector 内容时发生ConcurrentModificationException

相关文章:

java - Spring 使用的代理模式

r - 尝试安装R软件包时的“ld: Warning: directory not found”

android - Android构建错误

c++ - C++模板:专门的成员函数,用于解决主模板中模棱两可的重载情况

java - 如何在JavaFX中制作TimeSpinner?

java - 数学回合Java

c++ - 如何在C++中正确使用#ifndef #define #endif

javascript - 如何在JavaScript ECMA6中重载构造函数?

c++ - 如何操作 “>>”重载?

java - Spring Boot在存在schema.sql的情况下创建实体之前运行data.sql