Multi-dimensional array creation references

Remi Forax forax at univ-mlv.fr
Wed May 8 11:08:52 PDT 2013


On 05/08/2013 07:20 PM, Brian Goetz wrote:
> I'm fine with the current treatment, certainly for now.

I agree with Brian, given that one can use lambda instead of array 
reference,
I'm fine with the current state.

Rémi

>
> On 5/8/2013 12:10 PM, Dan Smith wrote:
>> We currently have array creation references:
>>
>> Function<Integer,String[]> f = String[]::new;
>>
>> Which are shorthand for lambdas that contain array creation expressions:
>>
>> Function<Integer,String[]> f = i -> new String[i];
>>
>> The array type may be a multi-dimensional array, and the integer 
>> represents the outermost dimension:
>>
>> Function<Integer,String[][]> f = String[][]::new;
>> Function<Integer,String[][]> f = i -> new String[i][];
>>
>> We do not support _multiple_ integer parameters:
>>
>> BiFunction<Integer,Integer,String[][]> f = String[][]::new; // illegal
>> BiFunction<Integer,Integer,String[][]> f = (i,j) -> new String[i][j];
>>
>> This was raised on lambda-dev as something to consider supporting.  I 
>> don't have a strong opinion one way or another; I don't think it's 
>> essential, and I don't think this is a particularly common use case, 
>> but it also wouldn't be too hard to do.  It does  carry a small 
>> amount of extra complexity.
>>
>> Does anyone have an opinion?
>>
>> I had this to say on lambda-dev:
>>
>>> Method references are essentially shorthand for lambda expressions.  
>>> We've selected a few common forms of lambda expressions to give them 
>>> special treatment. But there will always be something just slightly 
>>> different that lives outside of the set we've chosen to support.  
>>> And in that case, the solution is to use a lambda expression instead.
>>
>> —Dan
>>



More information about the lambda-spec-experts mailing list