Es scheint einen Fehler in der Java varargs-Implementierung zu geben. Java kann den geeigneten Typ nicht unterscheiden, wenn eine Methode mit verschiedenen vararg-Parametern überladen ist.Fehler mit Varargs und Überladung?
Es gibt mir einen Fehler The method ... is ambiguous for the type ...
den folgenden Code vor:
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");
}
}
die docs sagen: „Generell sollten Sie keine varargs Methode überlasten, oder es wird für Programmierer schwierig sein, herauszufinden, welche Überladung aufgerufen wird. "
aber sie erwähnen diesen Fehler nicht, und es ist nicht die Programmierer, die es schwierig finden, es ist der Compiler.
Gedanken?
EDIT - Compiler: Sun JDK 1.6.0 u18
Vielleicht Sie sprechen über die Programmierer, die den Compiler geschrieben haben. – mob
Welche Version und Compiler? Eclipse oder JDK? –
siehe bearbeiten - Sun jdk 1.6.0 u18 – pstanton