[英]Java: compile-time resolution and “most specific method” as it applies to variable arity
[英]Most specific method with matches of both fixed/variable arity (varargs)
在Java語言規范的第15.12.2.5節中 ,它討論了如何在具有固定arity的方法和可變arity方法(即varargs
)的兩種情況下選擇最具體的方法。
我在JLS中找不到的是關於兩個方法之間的決定,其中一個是固定的arity,另一個是變量arity 。 例如:
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
按照人們的預期編譯就好( 由Yoni概述的原因如下 )。 這個調用代碼也編譯:
SomeApi api = ...
Object o = api.getSomething("Hello");
如果你運行它,則調用method #1
(即非varargs方法)。 為什么這個調用代碼不含糊? 為什么固定arity方法比變量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)
毫不含糊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.