Lambda behaving differently than anonymous inner class
Sam Pullara
spullara at gmail.com
Wed Mar 26 17:50:46 UTC 2014
I think there was some discussion about whether the lambda parameters should be final. I still think they should have been. Sam
---Sent from Boxer | http://getboxer.com
On 03/26/2014 05:56 PM, Dan Smith wrote:
> Thanks for the report. The bug is filed here:
>
> https://bugs.openjdk.java.net/browse/JDK-8038420
>
> —Dan
Yes, definitively a bug !
Victor, modify a parameter inside a lambda is something weird|.||
Supplier<Integer>s2 =t ->t++;|
means
| Supplier<Integer>s2 =t ->{
t = t + 1;
return t;
};
|so this is equivalent to|
Supplier<Integer>s2 =t ->t+ 1;|
cheers,
Rémi
>
> On Mar 26, 2014, at 9:03 AM, Victor Antunes <victor.antunes.ignacio at gmail.com> wrote:
>
>> Hello all,
>>
>> This e-mail is a follow-up to a question I've posted on StackOverflow:
>> http://stackoverflow.com/questions/22648079/lambda-behaving-differently-than-anonymous-inner-class
>>
>>
>> I'm relatively new to Java, and decided to pick up on lambda since the past
>> few days. So I wrote a very simple anonymous inner class and wrote an
>> equivalent lambda.
>>
>> However, the lambda output was different, and it very strongly appears to
>> be a bug.
>>
>> Given:
>>
>> interface Supplier<T> {
>>
>> T get(T t);}
>>
>> Supplier<Integer> s1 = new Supplier<Integer>() {
>> @Override
>> public Integer get(Integer t) {
>> return t++;
>> }};Supplier<Integer> s2 = t ->
>> t++;System.out.println(s1.get(2));System.out.println(s2.get(2));
>>
>> The output is 2 and 3, NOT 2 and 2, as one would expect.
>>
>> More info, including discussion about bytecode is available at the SO link
>> above.
>>
>> I'm also new to this list, so apologies if I've broken any mailing list
>> etiquette.
>>
>> --
>> Kind regards,
>>
>> Victor Antunes
>>
>
More information about the lambda-dev
mailing list