Recursive lambda on field declarations in local classes and anonymous classes.

bitter_fox bitterfoxc at gmail.com
Tue Feb 21 14:44:24 PST 2012


Hi,
To use recursive lambda expressions, we have to use that statement:
    SAM sam = () -> sam.invoke();

However, the newest compiler rejects it on field declarations in local
classes and anonymous classes.
Cannot we use recursive lambda expressions in these situations?

public class Main
{
    interface SAM
    {
        void invoke();
    }

    SAM sam = () -> sam.invoke(); // Legal

    class Inner
    {
        SAM sam = () -> sam.invoke(); // Legal
    }

    Object obj = new Object()
    {
        SAM sam = () -> sam.invoke(); // Illegal
    };

    public static void main(String[] args)
    {
        class Local
        {
            SAM sam = () -> sam.invoke(); // Illegal
        }

        new Object()
        {
            SAM sam = () -> sam.invoke(); // Illegal
        };
    }

    public void method()
    {
        class Local
        {
            SAM sam = () -> sam.invoke(); // Illegal
        }

        new Object()
        {
            SAM sam = () -> sam.invoke(); // Illegal
        };
    }
}

Regards,
bitter_fox


More information about the lambda-dev mailing list