66 votos

¿Cómo puede el Eclipse crear una clase con problemas de compilación sin resolver?

Cuando intento compilar esta clase con javac, me sale un error de compilación y Test.class no se crea.

public class Test {
    public static void main(String[] args) {
        int x = 1L;  // <- this cannot compile
    }
}

Pero cuando voy a crear esta clase en Eclipse, puedo ver que Test.class aparece en target/classes. Cuando trato de ejecutar esta clase de línea de comandos con java.exe, tengo

Excepción en el hilo "principal" de java.lang.Error: sin resolver un problema de compilación:
Tipo de desajuste: no se puede convertir de largo a int

¿Eclipse utilizar su propio compilador de Java para crear un roto .clase? ¿Cómo se java.exe saber sobre complilation problemas .clase?

62voto

R.J Puntos 21942

Así es como el compilador Java sabe sobre el error de compilación en la clase.

 public static void main(String[] paramArrayOfString)
{
    throw new Error("Unresolved compilation problem: \n\tType mismatch: cannot convert from long to int.\n");
}
 

Si descompilar el archivo de clase, se puede ver lo anterior main() método del archivo de clase, que el compilador ha generado. Esto es debido al compilador que usos Eclipse (Eclipse Compiler for Java) no es el mismo que el compilador Java estándar!

41voto

Peter Lawrey Puntos 229686

Eclipse utiliza el compilador IBM que tiene una opción de creación de clases, que no se compila, en sustitución de errores con

throw new Error();

En mi humilde opinión, esto es una muy mala práctica y he visto a algunos muy buenos para la calidad de los proyectos de uso de esta. El proyecto no compilar completamente durante semanas a la vez.

A diferencia de fallar rápido estrategias, que intenta minimizar el costo de los errores, descubrir errores tan tarde como sea posible también maximiza el costo de la fijación de ellos.

Esta estrategia sólo funciona si estás escribiendo código de prototype rápidamente, es decir, de código usted sabe que nunca va a entrar en la producción. (Es difícil estar seguro de que este será el caso)

25voto

Erich Schubert Puntos 2118

Sí, Eclipse utiliza su propio compilador especial, conocida como "tjce". De Stack Overflow pregunta ¿Cuál es la diferencia entre javac y el Eclipse del compilador?:

Una diferencia notable es que el Eclipse compilador le permite ejecutar código que en realidad no compilar correctamente. Si el bloque de código con el error nunca se ejecutó, el programa se ejecuta bien. De lo contrario, se producirá una excepción que indica que se trató de ejecutar código no se compila.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X