68 votes

Comment Eclipse peut-il créer une classe avec des problèmes de compilation non résolus?

Lorsque j'essaie de compiler cette classe avec javac, j'obtiens une erreur de compilation et Test.class n'est pas créé.

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

Mais quand j'ai créer cette classe dans Eclipse, je peux voir que Test.class apparaît dans target/classes. Lorsque j'essaie d'exécuter cette classe à partir de la ligne de commande avec java.exe, - je obtenir

Exception in thread "main" java.lang.Erreur: non résolu problème de compilation:
Incompatibilité de Type: impossible de convertir de long int

N'Éclipse l'utilisation de son propre compilateur Java pour créer une fracture .de classe? Comment java.exe connaître complilation des problèmes .de classe?

64voto

R.J Points 21942

Voici comment le compilateur Java connaît l'erreur de compilation dans la classe.

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

Si vous décompilez votre fichier de classe, vous pouvez voir la méthode main() ci-dessus du fichier de classe, générée par le compilateur. En effet, le compilateur utilisé par Eclipse ( Compilateur Eclipse pour Java ) n’est pas identique au compilateur Java standard!

41voto

Peter Lawrey Points 229686

Eclipse utilise le compilateur IBM qui dispose d'une option de création de classes qui ne compile pas, en remplacement des erreurs avec

throw new Error();

À mon humble avis, c'est une très mauvaise pratique, et j'ai vu de très mauvaise qualité des projets de l'utiliser. Le projet ne compile pas complètement pendant des semaines à la fois.

Contrairement à échouer rapidement des stratégies qui cherchent à minimiser le coût de bugs, la découverte de bugs le plus tard possible, optimise également le coût de correction.

Cette stratégie ne fonctionne que si vous écrivez du code pour prototype rapidement, c'est à dire le code que vous savez ne sera jamais en production. (Il est difficile d'être sûr que ce sera le cas)

26voto

Erich Schubert Points 2118

Oui, Eclipse utilise sa propre compilateur connu sous le nom de "cjce". De Débordement de Pile question Quelle est la différence entre javac et l'Éclipse du compilateur?:

Une différence notable est que le compilateur Eclipse permet d'exécuter du code qui n'a pas fait de compiler correctement. Si le bloc de code avec l'erreur n'est jamais couru, votre programme va s'exécuter correctement. Sinon, il va lever une exception indiquant que vous avez essayé d'exécuter du code qui ne compile pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X