System.out.println((true) ? null: null);
问题:
为什么我有
The method println(char[]) is ambiguous for the type PrintStream
以及为什么不计算它,而将null
作为参数传递给println
方法或以其他方式,为什么表达式(真)? null:null
被视为 char[]
。
编辑:IDE 使用 Eclipse。
最佳答案
您没有正确指定错误。
查看 PrintStream.println()
的重载.您会注意到唯一的引用类型是 char[]
, String
和 Object
.
Netbeans 给我错误
Exception in thread "main"
java.lang.RuntimeException
: Uncompilable source code - reference toprintln
is ambiguous both methodprintln(char[])
injava.io.PrintStream
and methodprintln(java.lang.String)
injava.io.PrintStream
match
这正是我们所期望的方式:它不能在两者之间进行选择,因为两者都同样有效。
它没有提到 Object
重载的原因可以在 JLS 的小字中找到,章节 $15.12.2. Compile-Time Step 2: Determine Method Signature :
For example, declaring
m(Object...)
in a class which already declaresm(Object)
causesm(Object)
to no longer be chosen for some invocation expressions (such asm(null)
), asm(Object[])
is more specific.
你可以在第一阶段的解释中找到这个。
关于java - 为什么表达式 `(true) ? null: null` 被视为 char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246646/