Я знаю, почему следующий код не компилируется:
public class Main {
public static void main(String args[]) {
main((null)); // this is fine!
(main(null)); // this is NOT!
}
}
Что мне интересно, так это то, почему мой компилятор (javac 1.6.0_17, версия для Windows) жалуется на то, что «левая часть назначения должна быть переменной».
Я бы ожидал что-то вроде "Не ставьте скобки вокруг вызова метода, пустышка!", Вместо этого.
Так почему же компилятор делает совершенно бесполезную жалобу на что-то явно неуместное?
Является ли это результатом неясности в грамматике? Баг в компиляторе?
Если это первое, не могли бы вы спроектировать язык так, чтобы компилятор никогда не был настолько неосновным в отношении синтаксической ошибки, подобной этой?
Хорошо, я только что проверил, и, по-видимому, эта жалоба видна только из Затмения. Если я компилирую из командной строки, это дает более заметную ошибку «Не утверждение». Тайна углубляется.