lambda bugs? referencing instance variable from lambda body

Zhong Yu zhong.j.yu at gmail.com
Thu Sep 12 15:59:35 PDT 2013


This compiles . . . . . . . . . . . . . . . . . . . . . . . . .

public class Tmp
{
    final Runnable r1 = ()->System.out.println(r1);
}

This does NOT . . . . . . . . . . . . . . . . . . . . . . . . .

public class Tmp
{
    final Runnable r1;

    final Runnable r2 = ()-> System.out.println(r1); // Error: r1 not
initialized

    Tmp()
    {
        r1 = ()->System.out.println(r1);  // Error: r1 not initialized
    }
}



This compiles . . . . . . . . . . . . . . . . . . . . . . . . .

public class Tmp
{
    final Object lock = new Object();

    final Runnable r2 = ()->{
        System.out.println(r2);
        synchronized (lock){
        }
    };
}

This does NOT . . . . . . . . . . . . . . . . . . . . . . . . .

public class Tmp
{
    final Object lock = new Object();

    final Runnable r2 = ()->{
        synchronized (lock){
            System.out.println(r2);  // Error: self-reference in initializer
        }
    };
}


Zhong Yu


More information about the lambda-dev mailing list