可变参数之auto-boxing

来源:互联网 发布:avmoo最新域名2016 3 编辑:程序博客网 时间:2024/06/08 20:12

章节: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.


0 0
原创粉丝点击