Java varargs 구현에 버그가있는 것 같습니다. 메소드가 다양한 유형의 vararg 매개 변수로 오버로드되는 경우 Java는 적절한 유형을 구별 할 수 없습니다. 그것은 나에게 The method ... is ambiguous for the type ...
varargs 및 오버로드 버그가 있습니까?
다음과 같은 코드를 생각해 오류를 제공
:
public class Test
{
public static void main(String[] args) throws Throwable
{
doit(new int[]{1, 2}); // <- no problem
doit(new double[]{1.2, 2.2}); // <- no problem
doit(1.2f, 2.2f); // <- no problem
doit(1.2d, 2.2d); // <- no problem
doit(1, 2); // <- The method doit(double[]) is ambiguous for the type Test
}
public static void doit(double... ds)
{
System.out.println("doubles");
}
public static void doit(int... is)
{
System.out.println("ints");
}
}
docs 말 : "일반적으로, 당신은 가변 인자 방법에 과부하가 걸리지한다, 또는 프로그래머에 대한 어려울 것 어떤 오버로드가 호출되는지 알아 내라. "
그러나이 오류에 대해서는 언급하지 않았으며 어려운 것을 찾는 프로그래머는 아니지만 컴파일러입니다.
생각?
편집 - 컴파일러 : 썬 JDK 1.6.0 U18
: 당신은 제네릭을 사용할 수
을 또는 :
당신은 메소드 서명 대신 래퍼 유형을 사용할 수 있습니다 : 다행히도,이 문제를 방지 할 수있는 몇 가지 방법이 있습니다 그들은 컴파일러를 작성한 프로그래머에 대해 이야기하고 있습니다. – mob
버전 및 컴파일러는 무엇입니까? Eclipse 또는 JDK? –
편집보기 - Sun jdk 1.6.0 u18 – pstanton