Как Eclipse может создать класс с неразрешенными проблемами компиляции?
когда я пытаюсь скомпилировать этот класс с javac, я получаю ошибку компиляции и тест.класс не создается.
public class Test {
public static void main(String[] args) {
int x = 1L; // <- this cannot compile
}
}
но когда я создаю этот класс в Eclipse, я вижу этот тест.класс появляется в target / classes. Когда я пытаюсь запустить этот класс из командной строки с java.exe, я получаю
исключение в потоке" main " java.ленг.Ошибка: неразрешенная проблема компиляции:
Несоответствие типов: невозможно преобразовать из долго int
использует ли Eclipse свой собственный специальный компилятор Java для создания сломанного.класс? Как работает java.exe знают о проблемах с компиляцией .класс?
3 ответа:
вот как компилятор Java знает об ошибке компиляции в классе.
public static void main(String[] paramArrayOfString) { throw new Error("Unresolved compilation problem: \n\tType mismatch: cannot convert from long to int.\n"); }
Если вы декомпилировать файл класса, вы можете увидеть выше
main()
метод файла класса, который сгенерировал компилятор. Это из-за компилятор что Eclipse использует (компилятор Eclipse для Java) это не то же самое, что стандартный компилятор Java!
Eclipse использует компилятор IBM, который имеет возможность создавать классы, которые не компилируются, заменяя ошибки на
throw new Error();
ИМХО, это очень плохая практика, и я видел, что некоторые проекты очень низкого качества используют это. Проект не компилировался полностью в течение нескольких недель.
В отличие от стратегий fail fast, которые пытаются минимизировать стоимость ошибок, обнаружение ошибок как можно позже также максимизирует стоимость их исправления.
эта стратегия работает только если вы пишете прототип кода быстро, т. е. код, который вы знаете, никогда не попадет в производство. (Трудно быть уверенным, что это будет так)
да затмение использует собственный специальный компилятор, известный как "суд". От переполнения стека вопрос в чем разница между javac и компилятором Eclipse?:
одно заметное отличие заключается в том, что компилятор Eclipse позволяет запускать код, который на самом деле не компилируется должным образом. Если блок кода с ошибкой никогда не запускается, ваша программа будет работать нормально. В противном случае он выдаст исключение, указывающее, что вы пытались запустить код, который не компилируется.