¿Eclipse Juno está equivocado con este error de método ambiguo?

Hoy he estado jugando con Eclipse Juno. Viniendo de Helios es una gran actualización. Todo funciona bien, excepto un nuevo error de compilación.

Estamos usando el framework java.net 'Fuse' y llamamos al siguiente método:

ResourceInjector.get().inject(true, this);

Eclipse nos dice:

The method inject(Object[]) is ambiguous for the type ResourceInjector

Los siguientes métodos colisionan:

inject(Object... components);
inject(boolean arg0, Object... arg1);

Funcionó bien (con Java 1.6.0.25) en Eclipse Helios, pero ahora da un error de compilación y ya no quiere ejecutarse. Nos parece que esto es un error en Eclipse Juno, si construimos usando Maven está bien... ¿Alguien sabe una solución para esto?

preguntado el 04 de julio de 12 a las 07:07

3 Respuestas

En realidad, se trata de un error en Java 5 y Java 6. Esto se solucionó en Java 7 y Eclipse ahora busca este 'error'.

Más sobre el error aquí: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6886431

¿Qué método debe llamarse en el siguiente caso?

inject(true);

Ambos pueden aplicarse, claro, pero el booleano primitivo seguramente es una mejor combinación. No según la especificación del lenguaje Java (JLS):

  • Según 15.12.2.5, ninguno es más específico que el otro (int <: el objeto no es verdadero)

Una solución alternativa (no podemos cambiar Fuse en sí):

ResourceInjector.get().inject(true, new Object[] {this});

Respondido el 03 de enero de 14 a las 21:01

Pregunta relacionada aquí: "el método es ambiguo para el tipo" pero los tipos NO son ambiguos (y el error proviene de la actualización de eclipse 3.7.2 a eclipse 4.2), copiando mi respuesta:

Se ha archivado y solucionado un error para este problema. error 383780.
Aquí está la documentación de la solución: https://bugs.eclipse.org/bugs/attachment.cgi?id=218320

Básicamente, para corregir el error del compilador, obtenga la última compilación de la versión de eclipse Juno (4.2.1 a partir de ahora), agregue la siguiente línea después de -vmargs in eclipse.ini: (entonces es posible que deba reiniciar Eclipse y reconstruir sus proyectos)

-DtolerateIllegalAmbiguousVarargsInvocation=true

contestado el 23 de mayo de 17 a las 11:05

"tolerar" debería indicar que esto fue intencional ... fue un error en Java 5 y 6, aparentemente, que se solucionó en Java 7: bugs.sun.com/bugdatabase/view_bug.do?bug_id=6886431 comportamiento esperado: error del compilador. - Ha QUIT - Anony-Mousse

@NicholasDiPiazza tengo Neon 1.a y esto tampoco me funciona. - Gabor Szarnyas

es realmente raro que, si cambias la API

inyectar(booleano arg0, Objeto... arg1);

a

inyectar(Booleano arg0, Objeto... arg1);

luego inyectar (verdadero, esto) ya no es ambiguo

Creo que la corrección de errores http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6199075 definitivamente es una MALA idea

Respondido 06 Feb 13, 10:02

Me di cuenta de esto yo mismo. La moraleja parece ser, no preceder un parámetro de argumento variable con un tipo primitivo. Tuve este problema al intentar actualizar a Juno y cambiar el método (int, Object []) a method (Integer, Object []) funciona bien. Dado que el compilador hará cumplir esto, parece haber pocas alternativas para seguir con el programa. - Steve Cohen

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.