2012-07-04 57 views
10

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.¿Eclipse Juno está equivocado con este error de método ambiguo?

Estamos utilizando el marco java.net 'Fuse' y que llamamos el siguiente método:

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

Los siguientes métodos chocan::

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

Eclipse nos dice

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 no quiere ejecutar ninguna Más. Nos parece que esto es un error en Eclipse Juno, si construimos usando Maven, se construye bien ... ¿Alguien sabe cómo solucionarlo?

Respuesta

8

Esto es realmente un error en Java 5 y Java 6. Esto se ha corregido en Java 7, y ahora Eclipse comprueba este 'error'.

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

¿Qué método debe ser llamado en el siguiente caso?

inject(true); 

ambos pueden aplicar, seguro, pero el booleano primitiva sin duda es un mejor partido? No de acuerdo con la especificación del lenguaje Java (JLS):

  • por 15.12.2.5, ni es más específica que la otra (int <: El objeto no es cierto)

Una solución alternativa (que no son capaces de cambiar fusibles en sí):

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

2

pregunta relacionada aquí: "method is ambiguous for the type" but the types are NOT ambiguous (and the error comes by upgrade from eclipse 3.7.2 to eclipse 4.2), la copia de mi respuesta:

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

Básicamente, para solucionar el error del compilador, obtener la última Eclipse Juno versión de lanzamiento (4.2.1 a partir de ahora), agregue la siguiente línea después -vmargs en eclipse.ini: (a continuación, que sea necesario reiniciar Eclipse y proyectos de reconstrucción)

-DtolerateIllegalAmbiguousVarargsInvocation=true 
+0

"tolerar" deben indicar que esto fue intencional ... fue un error en Java 5 y 6, al parecer, que se corrigió en Java 7: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6886431 ** comportamiento esperado **: error del compilador. –

+0

esto no parece funcionar en neón? –

+0

@NicholasDiPiazza Tengo Neon 1.a y esto tampoco funciona para mí. –

0

que es muy raro que, si cambia la API

inyección (arg0 booleano, objeto ... arg1);

a

inyección (arg0 booleano, objeto ...arg1);

luego inyectar (es verdad, esto) no ambigua más

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

+0

Me di cuenta de esto yo mismo. La moraleja parece ser, no precede 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 []) al método (Integer, Object []) funciona bien. Como el compilador va a hacer cumplir esto, parece haber poca alternativa para obtener el programa. –

Cuestiones relacionadas