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

关于可变参数问题
Java code

package com.java.test;

public class NetworkTest
{
    public void f(Character... c)
    {
        System.out.println("First");
    }
    
    public void f(int i, Character... c)
    {
        System.out.println("Second");
    }
    
    public static void main(String[] args)
    {
        NetworkTest test = new NetworkTest();
        test.f(1, 'a');
        test.f('b', 'c');   // Eclipse编译报错
    }
}



针对 test.f('b','c'), Eclipse会报编译错误,如下:
The method f(Character[]) is ambiguous for the type NetworkTest

但我认为应该匹配上第一个方法 public void f(Character... c) 呀,请问这是什么原因呢?
多谢



------解决方案--------------------
刚看错了,那是因为test.f('b', 'c');
这里面的f比较模糊,编译器也不知道到底要调哪一个f方法。
因为f('b', 'c')中的'b'是可以隐身的转成int型的,所以
f(Character... c)符合,f(int i, Character... c)也符合。

不信你把其中任意一个f方法注释掉,
test.f('b', 'c')应该都不会编译报错。