Lambda behaving differently than anonymous inner class

Sam Pullara spullara at gmail.com
Wed Mar 26 15:14:57 UTC 2014


I'm not sure there is a valid use case but it looks like a bug to me. Does it reproduce if you define the lambda as { return t++; } ? Sam    

---Sent from Boxer | http://getboxer.com

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