2016-12-30 2 views
-3

Мне было интересно, почему это так. Как и почему IntelliJ может обнаруживать недостающие полуколоны и компилятор Java не может? Есть ли случай, когда IntelliJ является неправильным, и нет способа фактически обнаружить отсутствующую точку с запятой? Я читал аналогичный вопрос, обсуждая C и C++, есть указатели, которые усложняют ситуацию, но Java кажется более простым в этом отношении.Почему IntelliJ обнаруживает недостающие полуколоны и компилятор Java не может?

+5

Каким образом компилятор Java не обнаруживает недостающие полуколоны? Если они отсутствуют, код не будет компилироваться ... –

+0

@ElliottFrisch Ну, компилятор может сказать вам «;» отсутствует ... или он может давать всевозможные вводящие в заблуждение сообщения. – GhostCat

+0

Итак, если java-компилятор может его обнаружить, зачем нам их использовать? – Tom

ответ

3

Я хотел бы оспорить ваше предположение, что компилятор 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 

Как вам может видеть, он не только обнаружил недостающую точку с запятой, но даже смог указать точно , где он отсутствовал.

+0

В нижней части всех черепах IDEA также использует компилятор api для проверки кода. Например, он отлично реплицирует ошибку редкого компилятора. – pvg

+0

Разве? У меня создалось впечатление, что у IDEA фактически есть своя собственная инфраструктура компилятора, поэтому они иногда немного отстают в новых языковых функциях, но также являются причиной того, почему такие удивительные функции, как вставка кода Java в исходный файл Scala, и это автоматически преобразованный в работу Scala. У них есть единый интегрированный «компилятор IDE» с единым интегрированным представлением семантического дерева с несколькими языками и различными интерфейсами. (Похоже, это та же технология, которая лежит в основе JetBrains MPS.) Или я совершенно не прав? –

+0

Нет, я не думаю, что вы ошибаетесь, у меня просто сложилось впечатление, что они идут дальше, если могут, из-за того, что они отлично сочетаются с ошибками. Теперь мне интересно, не ошибаюсь ли я в этом, позвольте мне попытаться выкопать конкретный случай. – pvg

Смежные вопросы