最具体的方法,既有固定/可变ARITY(VARARGS)的匹配项
-
19-09-2019 - |
题
在 Java语言规范的第15.12.2.5节, ,它讨论了如何在两种具有固定ARITY和可变方法的方法的方法中选择最特定的方法(即 varargs
).
我在JLS中找不到的是在两种方法之间决定 一个是固定的,是可变的 然而。例如:
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
正如人们所期望的那样,编译好的(由于下面概述的原因)。此调用代码还编译:
SomeApi api = ...
Object o = api.getSomething("Hello");
如果您运行它, method #1
(即非varargs方法)被调用。为什么这个呼叫代码不模棱两可?为什么固定的ARITY方法比变量 - 元素更具体?有人可以将我指向规格的相关位吗?
解决方案
第一个方法分辨率阶段仅考虑固定的ARITY方法,并且在考虑任何varargs方法之前找到匹配项,该过程将终止。
从 http://docs.oracle.com/javase/specs/jls/se6/html/expressions.html#15.12.2.2
15.12.2.2阶段1:识别 匹配的Arity 通过子类型适用的方法
如果找不到子类型的适用方法,则在第2阶段(第15.12.2.3节)中继续搜索适用方法。 否则,最具体的方法(§15.12.2.5)将在通过亚型适用的方法中选择。
(我的重点。)
其他提示
我不能指向您的规格,但是从逻辑上讲,
getSomething(String...args)
转换为
getSomething(String[] args)
没有歧义
不隶属于 StackOverflow