2011-04-12 17 views

Respuesta

38

El problema cuando intenta crear una instancia de una clase que podría aplicarse a más de un constructor.

Por ejemplo:

public Example(String name) { 
    this.name = name; 
} 

public Example(SomeOther other) { 
    this.other = other; 
} 

Si se llama al constructor con un objeto String, hay un constructor definido. Sin embargo, si crea una instancia de new Example(null), entonces podría aplicarse a cualquiera de ellos y, por lo tanto, es ambiguo.

Lo mismo puede aplicarse a los métodos con firmas similares.

5

Esto significa que tiene dos constructores con la misma firma, o que usted está tratando de crear una nueva instancia de Case con parámetros que podría coincidir con más de un constructor.

En su caso:

Case(Problem, Solution, double, CaseSource) 

Java crear métodos (constructores) las firmas con los tipos de parámetros. Puede tener dos métodos con los mismos tipos de parámetros similares y, por lo tanto, es posible generar llamadas ambiguas proporcionando argumentos ambiguos que podrían coincidir con varias firmas de método (constructor).

Es posible reproducir este error (que no es culpa de Eclipse) con este código: existe

class A { 
    public A(String a) { } 
    public A(Integer a) { } 

    static public void main(String...args) { 
     new A(null); // <== constructor is ambiguous 
    } 
} 
+4

¿Cómo puede tener dos constructores con la misma firma. En eclipse dará error: 'Método de método duplicado (params) en el tipo Cls ' –

+0

no puede tener dos constructores (métodos) de la misma firma. – GuruKulki

3

En otras palabras, no está claro a cuál de los constructores se debe llamar.

+3

es un comentario en lugar de una respuesta –

+1

Esta es una respuesta, pero no es útil. Tal vez una explicación más larga ayudaría. – Daniel

4

Para agregar a otras respuestas, se puede evitar por colada el argumento de lo que se pretende, por ejemplo .:

class Foo { 

    public Foo(String bar) {} 
    public Foo(Integer bar) {} 

    public static void main(String[] args) { 
     new Foo((String) null); 
    } 

} 
Cuestiones relacionadas