当传递null作为参数传递给重载可变参数方法(对象... O)和非可变参数方法(对象o),为什么VARARGS执行方法?

Dongmin Sun :

例如,一类包括两个方法,

public void find(Object id);
public void find(Object... ids);

当我发现调用(空),为什么JVM实际执行的最后一个?

在接受的答案中调用Java可变参数方法与单空参数?我们可以读到

Java不知道它是什么类型应该是。这可能是一个空的对象,或者它可能是一个空对象数组。对于一个单独的参数它假定后者 “。

但是这仍然没有解释它。任何人都可以提供像语言规范一些信息呢?

apangin:

Object[]是更具体的类型比Object

根据JLS§15.12.2

如果不止一个成员方法既方便和适用于方法调用,就必须选择一个提供运行时方法调度描述符。Java编程语言使用的是选择了最具体方法的规则。

非正式的直觉是一种方法是更具体的比另一个如果第一种方法处理的任何调用可以到另一个没有编译时错误传递。

同一章也有一个例子正是有关问题的情况。

[...]的可变元数的方法被视为在第一阶段中的固定元数的方法。例如,声明在已经声明米(对象)导致米(对象),以不再被选择用于某些调用表达式(如米(空))一类m(对象...),为m(对象[] )是更具体的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章