[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: bindings and assignments (was: Re: continuations)





Michael Vanier wrote:

>>Date: Thu, 14 Aug 2003 10:45:34 -0400
>>From: "David B. Tucker" <dbtucker@cs.brown.edu>
>>
>>>I imagine, though I don't have statistical evidence, that the
>>>requirement of declaring local variables to be final in order to
>>>reference them within anonymous inner classes (closures) is almost
>>>entirely unknown and unused in practice.
>>>
>>Out of curiosity, does anyone know why Java only allows final variables
>>to be referenced from within anonymous classes?
>>
>>Dave
>>
>>
> 
> <cynic> 
> Otherwise you'd have the equivalent of true closures, and if you had that
> java would be a *really* powerful and useful language, so they obviously
> couldn't do that. 
> </cynic>
> 
> This is my #1 pet peeve about java.  It drives me crazy.  So many styles of
> programming are made so much harder because of this.  But with real
> closures, the environment model of java would get more complicated, and
> presumably there would be efficiency costs as well, and I assume that the
> language's designers didn't want to deal with any of that.
> 


But, they _do_ have the equivalent of true closures...  You just need to do
the mechanical translation:

X foo; => final X[] foo = new X[1];

and refer to foo everywhere as foo[0].

It sucks, but it works.  I always assumed they did this so that a lot
of the inner class stuff could be implemented as source -> source
transformations, but I guess GLS could probably give us a better
explanation.

--Jerry