簡體   English   中英

具有固定/可變arity(varargs)匹配的最具體方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM