首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java可变参数重载有关问题

2013-09-06 
java可变参数重载问题public class Test_Demo {static void f(float i, Character... s) {System.out.prin

java可变参数重载问题
public class Test_Demo {
static void f(float i, Character... s) {
System.out.println("first");

System.out.println(i);
for(Character c :s){
System.out.println(c);
}
}
static void f(Character... s) {
System.out.println("second");
}

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

}
会报错 Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
The method f(float, Character[]) is ambiguous for the type Test_Demo

at com.test.Test_Demo.main(Test_Demo.java:19)

但是改成
public class Test_Demo {
static void f(float i, Character... s) {
System.out.println("first");

System.out.println(i);
for(Character c :s){
System.out.println(c);
}
}
static void f(char c ,Character... s) {
System.out.println("second");
}

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

}

后就没有问题了 我最大的疑问就是  f(char c ,Character... s) 与 f(Character...s)的区别  为什么添加了一个char c的形参就不报错了 可变参数重载 java基础
[解决办法]
嗯,你说的对。
我又参考3L的写法,做了个小例子:


    static void f(char c, Character... s)
    {
        System.out.println("mohu1");
    }
    
    static void f(char c,char c2, Character... s)
    {
        System.out.println("mohu1");
    }

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


当非可变参数类型与可变参数的类型相同时,是存在“不确定性”的。
此时与int型那个方法的原因就不一样了。
[解决办法]
static void f(Character c ,Character... s) {
也不会报错
比较
static void f(char c,Character... s) {
static void f(float i, Character... s) {

float x='1';//int 直接转型
char c='1';
编译器不知道你到底要怎么转型,两种转型对应两个方法

热点排行