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) 呀,请问这是什么原因呢?
多谢

解决方案 »

  1.   

    test.f(1, 'b', 'c');你只是对Character型参数可变,但第一个int型参数还是要传的啊。
      

  2.   

    test.f('b', 'c');   // Eclipse编译报错
    你这个2个参数 就取找第二个 f(); 但是第一个参数是int,所以就报错
      

  3.   

    刚看错了,那是因为test.f('b', 'c');
    这里面的f比较模糊,编译器也不知道到底要调哪一个f方法。
    因为f('b', 'c')中的'b'是可以隐身的转成int型的,所以
    f(Character... c)符合,f(int i, Character... c)也符合。不信你把其中任意一个f方法注释掉,
    test.f('b', 'c')应该都不会编译报错。
      

  4.   

    public void f(Character... c)
    public void f(int i, Character... c)
    这两个方法是进行了重载, 小弟认为test.f('b', 'c')应该去匹配地一个才对,但为什么报错呢?
      

  5.   

    OK, 多谢 flagiris,
    结贴