【发布时间】:2019-01-14 21:58:55
【问题描述】:
例如,一个类包含两个方法,
public void find(Object id);
public void find(Object... ids);
当我调用find(null)时,为什么jvm实际上执行了最后一个?
在Calling Java varargs method with single null argument? 接受的答案中,我们可以读到
Java 不知道它应该是什么类型。它可以是一个空对象,也可以是一个空对象数组。 对于单个参数,它假定为后者。”
但这仍然无法解释。谁能提供更多信息,例如语言规范?
【问题讨论】:
-
因为
Object[]比Object更具体。见JLS §15.12.2。 -
@apangin 您应该将其发布为答案
-
不是答案——但定义 find(Object) 有什么意义吗?据推测,单参数实现与使用单个参数的可变参数实现产生相同的结果。还是有一个专门针对单个 arg 的实现更有效?
-
@another-dave 如果我没记错的话,效率是为什么除了
List.of(E... elements)我们还有List.of(E e)List.of(E e1, E e2)...直到List.of([..], E e9, E e10)。