Java 言語仕様のセクション 15.12.2.5 では、固定アリティのメソッドと可変アリティのメソッド (つまり ) の両方の場合で最も具体的なメソッドを選択する方法について説明していますvarargs
。
JLS で見つけられないのは、1 つは固定アリティで、もう 1 つは可変アリティの2 つの方法の間で決定することです。例えば:
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
(つまり、非可変引数メソッド) が呼び出されます。この呼び出しコードがあいまいではないのはなぜですか? 固定アリティ方式が可変アリティ方式よりも具体的なのはなぜですか? 誰かが仕様の関連するビットを教えてもらえますか?