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

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

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

mais quand je crée cette classe dans Eclipse, je peux voir ce Test.la classe apparaît dans target / classes. Quand j'essaie d'exécuter cette classe depuis la ligne de commande avec java.exe, je reçois

Exception dans le thread" main " java.lang.Erreur: problème de compilation non résolu:

Décalage de Type: impossible conversion de long en int

fait Eclipse utiliser son propre compilateur Java spécial pour créer une cassée .de classe? Comment java.exe connaît les problèmes de complilation .de classe?

68
demandé sur Peter Mortensen 2013-05-06 11:36:09

3 réponses

C'est ainsi que 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, que le compilateur a généré. Cela est dû au compilateur 151960920 "Qu'Eclipse utilise ( compilateur Eclipse pour Java ) n'est pas le même que le compilateur Java standard!

64
répondu SudoRahul 2013-05-09 20:47:16

Eclipse utilise le compilateur IBM qui a une option de créer des classes qui ne compilent pas, en remplaçant les erreurs par

throw new Error();

IMHO, c'est une très mauvaise pratique et j'ai vu certains projets de très mauvaise qualité utiliser cela. Le projet ne se compilait pas complètement pendant des semaines.

Contrairement aux stratégies fail fast, qui tentent de minimiser le coût des bogues, la découverte des bogues aussi tard que possible maximise également le coût de leur correction.

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

41
répondu Peter Lawrey 2013-05-06 07:43:31

Yes, Eclipse utilise son propre compilateur spécial; connu sous le nom de"CJE". De Stack Overflow question Quelle est la différence entre javac et le compilateur Eclipse? :

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

26
répondu Erich Schubert 2017-05-23 11:52:52