Proposal: Collection Literals

Joshua Bloch jjb at
Mon Mar 30 21:06:55 PDT 2009

Thanks for looking at the proposal.

On Mon, Mar 30, 2009 at 8:53 PM, Joe Darcy <Joe.Darcy at> wrote:

>> This desugaring assumes the existence of a new library method,
>> asUnmodifiableList, described below under Library Support. Note that type
>> inference of the element type for the list literal is exactly as if the
>> following method were invoked with *ElementInitializers *as as actual
>> parameters:
>>   <E> void foo(E... args) { }
> So the type of the list is computed as if using var-args, including when
> the args are themselves augmented constants.
> One possible wrinkle here is the bad interaction between var-args and
> generics.  This would be removed if only "top level" literals were allowed
> (i.e. no nested Lists and Set, etc.), at the cost of reducing the utility of
> the feature.

Good point!  Currently, the desugaring of the Pascal's triangle example
would work, but it would generate an unchecked generic array creation (of
type List<java.lang.Integer>[] for varargs parameter).  But, if we end up
implementing Bob Lee's proposal ("Simplified Varargs Method Invocation"),
the problem goes away:)  I consider it a good sign when a group of language
changes work well together.


P.S.  To be fair, I haven't thought through this in gory detail, especially
when it comes to map literals.  But I'm hopeful.

More information about the coin-dev mailing list