jface.snippets.Snippet031 : Win32 Exception

yidabu yidabu.spam at gmail.com
Wed May 21 02:21:00 PDT 2008

On Wed, 21 May 2008 10:20:07 +0200
Frank Benoit <keinfarbton at googlemail.com> wrote:

> A potential problem might be the access to local variables that were no 
> more alive.
> A Java local variable with keyword "final" is like a big red warning for 
> me. When porting this to D, it needs special care to examing the 
> accesses to this variable. In Java the "final" makes this variable to be 
> available for anonymouse classes even if the method exits. This feature 
> is in D2 available as "full closure". In D1, you need to take for this 
> on your own.
> In your code, there is this "final Table table = new Table(..." which is 
> accessed from the anonymous Listener directly.
> Possible solutions:
> 1.) create a local variable in the anonymouse class for the table. Call 
> this variable eg. "table_". Create a constructor [1] and pass it table 
> as "new class(table) Listener {...". Replace all "table" accesses in the 
> class with "table_".
> The resulting code is verbose and this is error-prune, because there is 
> no compiler supported check if you missed one of the problematic accesses.
> 2.) Make a named class outside the local scope
> This will immediatly show you the problematic accesses. But still the 
> code will be verbose.
> 3.) use the dgListener template function. you can move the handleEvent 
> function where you want and you do not need the verbose extra variable 
> saving.
> [1] initializing the variable directly with the outer var does create 
> new problems. The compiler has to choose for a context pointer for this 
> class. Either the context of the surrounding method or the "this" of the 
> surrounding class. If you initialize the anonymouse class members 
> directly the compiler will choose the methods context and an attemp to 
> access outer member after the surrounded method has exited, => crash.

Frank Benoit, Thanks a million
I will check the code.

yidabu <yidabu.spam at gmail.com>

D 语言-中文(D Chinese):

More information about the Digitalmars-d-dwt mailing list