Мне было интересно, почему это так. Как и почему IntelliJ может обнаруживать недостающие полуколоны и компилятор Java не может? Есть ли случай, когда IntelliJ является неправильным, и нет способа фактически обнаружить отсутствующую точку с запятой? Я читал аналогичный вопрос, обсуждая C и C++, есть указатели, которые усложняют ситуацию, но Java кажется более простым в этом отношении.Почему IntelliJ обнаруживает недостающие полуколоны и компилятор Java не может?
ответ
Я хотел бы оспорить ваше предположение, что компилятор Java не может обнаружить недостающие точки с запятой. Я просто попытался скомпилировать следующий код javac
из Oracle JDK 8, и это вполне в состоянии обнаружить недостающую точку с запятой:
public class Test {
public static void main(String... args) {
System.out.println()
}
}
Ошибка компилятора напечатана следующая:
Test.java:3: error: ';' expected
System.out.println()
^
1 error
Как вам может видеть, он не только обнаружил недостающую точку с запятой, но даже смог указать точно , где он отсутствовал.
В нижней части всех черепах IDEA также использует компилятор api для проверки кода. Например, он отлично реплицирует ошибку редкого компилятора. – pvg
Разве? У меня создалось впечатление, что у IDEA фактически есть своя собственная инфраструктура компилятора, поэтому они иногда немного отстают в новых языковых функциях, но также являются причиной того, почему такие удивительные функции, как вставка кода Java в исходный файл Scala, и это автоматически преобразованный в работу Scala. У них есть единый интегрированный «компилятор IDE» с единым интегрированным представлением семантического дерева с несколькими языками и различными интерфейсами. (Похоже, это та же технология, которая лежит в основе JetBrains MPS.) Или я совершенно не прав? –
Нет, я не думаю, что вы ошибаетесь, у меня просто сложилось впечатление, что они идут дальше, если могут, из-за того, что они отлично сочетаются с ошибками. Теперь мне интересно, не ошибаюсь ли я в этом, позвольте мне попытаться выкопать конкретный случай. – pvg
- 1. Почему компилятор не обнаруживает определенных причин ConcurrentModificationException
- 2. Почему Java-компилятор не может найти символы?
- 3. Почему Java-компилятор не может найти символы?
- 4. Intellij IDEA не обнаруживает изменений
- 5. Почему ошибка jQuery не обнаруживает недостающие изображения на этой странице?
- 6. Intellij - ошибки JAVA (импорт и т. Д.) Не обнаруживает
- 7. Intellij не обнаруживает синтаксис игры
- 8. CTE и закрывающие полуколоны
- 9. IntelliJ не обнаруживает классы Java из другого пакета
- 10. Почему компилятор Ideone.com C не обнаруживает несогласованные типы указателей?
- 11. Почему MSVC-компилятор не обнаруживает std :: array из связанного доступа
- 12. Динамическое связывание Java: почему компилятор не может отличить методы переопределения
- 13. Почему Java-компилятор не может правильно определить наследование?
- 14. Intellij не обнаруживает соответствующую версию Java в Tycho/Maven build
- 15. Почему компилятор не может найти заголовочный файл?
- 16. компилятор не может понять '_FILE_' почему?
- 17. Почему компилятор не может оптимизировать этот код?
- 18. Почему не Java компилятор жалуется на это:
- 19. Компилятор обнаруживает allegro.h, но не allegro_primitives.h
- 20. Компилятор не обнаруживает явно неинициализированную переменную
- 21. Почему компилятор g ++ не может найти unique_ptr?
- 22. GNU компилятор KEY_F не обнаруживает функциональные клавиши
- 23. Android Studio не может найти java-компилятор
- 24. Почему компилятор не обнаруживает и не создает ошибок при попытке изменить строковые литералы char *?
- 25. Компилятор Java не может видеть мой класс
- 26. IntelliJ IDEA не обнаруживает jar-файл библиотеки classpath
- 27. Hadoop Java компилятор не может найти файлы
- 28. IntelliJ не обнаруживает стойки 2 и плитки, не может создать набор файлов
- 29. Компилятор Java не может найти класс Kafka
- 30. Почему это компилятор Java не компилируется?
Каким образом компилятор Java не обнаруживает недостающие полуколоны? Если они отсутствуют, код не будет компилироваться ... –
@ElliottFrisch Ну, компилятор может сказать вам «;» отсутствует ... или он может давать всевозможные вводящие в заблуждение сообщения. – GhostCat
Итак, если java-компилятор может его обнаружить, зачем нам их использовать? – Tom