2. For local variable declaration, the initializer can omit `new int[]` part:
int data[] = {1, 2, 3}
Good catch.  For some reason I was thinking this was only for fields,
but it works for locals too.  There's a future story about collection
literals, but it is unlikely we'll be able to retcon exactly this
syntax.  (#include "bikeshed-deterrent.h")
the whole story about initializing a local variable with an array is weird,
   int data[] = {1, 2, 3};
compiles but
   int data[];
   data = {1, 2, 3};
does not.

True, and I hate it.  This is related to the C-style array decl; for the first year it was really important that Java seem friendly to C developers, and this was one of the compromises.  For the rest of time, it is just an annoying irregularity.


We may be able to address this by including a conversion from an array
initializer to the target type of a pattern in an unconditional pattern
assignment context.
while if think we have specify inference that uses the target type in order to 
avoid to avoid type patterns with a lot of redundant type information,
i'm not sure emulating that particular quirk of Java is a good idea.

Where I'm going here is that I don't want to introduce a "pattern assignment" statement that is new and different from local variable declaration with initializer; I want to make the semantics align 100%, so that pattern assignment is a pure generalization of local variable declaration with initializer.  We're 96% of the way there.

Reply via email to