鉴于void foo(Boolean... bars)
函数的作用,bars
的行为与以下函数调用的行为明显不同:
bars = Boolean[0]
bars = null
bars = Boolean[2] { null, null }
为什么调用foo(null)会产生bars = null
而不是Boolean[1] { null }
?
这是在Java 8上复制的。
答案 0 :(得分:3)
这是由于采用了determining method signature的3种方法:
foo(null)
在阶段1中被匹配,因为接受Boolean[]
的方法只允许使用一个null参数,因为您可以将null
强制转换为Boolean[]
(或者,实际上,任何引用类型)。
foo(null, null)
在第3阶段匹配,因为那是匹配可变arity方法的时候。假设您没有foo
的2-arg重载,那么在此之前就无法对其进行匹配,因为匹配方法需要两个参数。