Protected variable access inside Lambda blocks

Arul Dhesiaseelan aruld at acm.org
Sat Nov 13 16:17:37 PST 2010


Thanks Mark and Peter for the clarification.

-Arul

On Sat, Nov 13, 2010 at 1:30 PM, Peter Levart <peter.levart at gmail.com>wrote:

> On Saturday, November 13, 2010 08:28:15 pm Arul Dhesiaseelan wrote:
> > Hi,
> >
> > I am trying to access a protected final defined in my SAM type from
> within
> > a Lambda block, but it fails with "cannot find symbol" compile error with
> > the prototype.
> >
> > Here is a simple test:
> >
> > public class ProtectedAccess {
> >     public static abstract class LambdaAccess<T> {
> >         protected static final String DEFAULT = "DEFAULT";
> >         public abstract T block();
> >     }
> >
> >     public static void main(String... args) throws Exception {
> >         LambdaAccess<String> lambdaAccess = #{
> >             return DEFAULT;//compile error: unable to access this
> protected
> > constant
> >         };
> >         lambdaAccess.block();
> >
> >         LambdaAccess<String> anonymousAccess = new LambdaAccess<String>()
> {
> >             public String block () {
> >                 return DEFAULT;//works just fine in case of anonymous
> types
> >             }
> >         };
> >         anonymousAccess.block();
> >     }
> >
> > }
> >
> > I am not sure if this is a limitation or if I am doing something wrong
> > here.
> >
> > -Arul
>
> As of 15.10.2010, the lambdas are lexically scoped (see:
> http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-3.html<http://cr.openjdk.java.net/%7Ebriangoetz/lambda/lambda-state-3.html>).
> In other words, code inside
> lambda sees only the symbols as the code immediately outside the lambda
> expression.
>
> Peter
>
>


More information about the lambda-dev mailing list