日期:2014-05-20  浏览次数:20733 次

参数列表问题
public class Tree {
static void f(float i,Character...characters){
System.out.println("first");
}
static void f(Character...characters){
System.out.println("second");
}

public static void main(String[] args) {
f(1,'a');
f('a','b');

}

}
红色部分为什么无法编译通过啊

public class Tree {
static void f(float i,Character...characters){
System.out.println("first");
}
static void f(Character c,Character...characters){
System.out.println("second");
}

public static void main(String[] args) {
f(1,'a');
f('a','b');

}

}
做如上更改后仍然无法编译通过?


------解决方案--------------------
楼主请看这个程序:
Java code

public class Test1 {
    static void f(float i){
    }
    public static void main(String[] args) {
        f('a');
    }
 
}

------解决方案--------------------
根本原因我觉得就是同一个参数如'a',既可以作为Character类型被接收,也可以作为float类型被接收,所以当二者在一起,以重载的方式出现时,编译器便会报错
------解决方案--------------------
不能通过编译的原因是f('a','b')对两个方法都匹配
static void f(Character c,Character...characters){
System.out.println("second");
}
=》
static void f(char c,Character...characters){
System.out.println("second");
}
------解决方案--------------------
探讨
根本原因我觉得就是同一个参数如'a',既可以作为Character类型被接收,也可以作为float类型被接收,所以当二者在一起,以重载的方式出现时,编译器便会报错