可變參數之auto-boxing

章節:Initialization & Cleanup > Array initialization > Variable argument lists

以下程序會報錯:

public class OverloadingVarargs2 {
    static void f(float i, Character... args) {
        System.out.println("first");
    }
    static void f(Character... args) {
        System.out.print("second");
    }
    public static void main(String[] args) {
        f(1, ‘a’);
        f(‘a’, ‘b’);
    }
}
f('a', 'b')無法匹配。原因不得而知(char類型可以轉換爲float,也可以auto-boxing爲Character,但無法在二者間做出選擇?)

改爲一下則可以通過編譯:

public class OverloadingVarargs3 {
    static void f(float i, Character... args) {
        System.out.println("first");
    }
    static void f(char c, Character... args) {
        System.out.println("second");
    }
    public static void main(String[] args) {
        f(1, 'a');
        f('a', 'b');
    }
} 
因此,作者給出瞭如下建議:

You should generally only use a variable argument list on one version of an overloaded method. Or consider not doing it at all.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章