I know why the following code doesn't compile:
public class Main {
public static void main(String args[]) {
main((null)); // this is fine!
(main(null)); // this is NOT!
}
}
What I'm wondering is why my compiler (javac 1.6.0_17, Windows version) is complaining "The left hand side of an assignment must be a variable".
I'd expect something like "Don't put parentheses around a method invokation, dummy!", instead.
So why is the compiler making a totally unhelpful complaint about something that is blatantly irrelevant?
Is this the result of an ambiguity in the grammar? A bug in the compiler?
If it's the former, could you design a language such that a compiler would never be so off-base about a syntax error like this?
Okay, I just checked and apparently this complaint is only seen from within Eclipse. If I compile from the command line, it gives the more sensible "Not a statement" error. The mystery deepens.