Stałe zmienne w funkcji

0

Witam.

Nurtuje mnie pytanie odnośnie stałych zmiennych deklarowanych w funkcjach. Przeglądałem przykładowy tutorial GWT w którym był taki oto pseudo kod:

void jakasFunkcja(){
 final String text = textBox.getText();
 contener.addText(text);

 Button btn = new Button("nowy");
 btn.addClickHandler(new ClickHandler())
 {
   public void onClick(ClickEvent event) {
   if(conterer.containst(text)
   {
     //rob cos tam
   }
 }
 panel.addWidget(btn);
}

Zastanawiam się teraz jak działa mechanizm kliknięcia Buttonów. Rozumiem, że przy kliknięciu w btn, handler "widzi" te zmienne które zostały zadeklarowane w tym samym bloku i w dodatku jako stałe ? Chciałbym zrozumieć tak na chłopski rozum jak dochodzi do tego, że te zmienne są "powiązane" z clickHandlerem pomimo opuszczenia funkcji "jakasFunkcja". Czy jest robiony tak jakby "snapshot" pamięci całego bloku kodu, w tym wypadku funkcji ?

1

'stałe zmienne' smiesznie brzmi ;d Stałe albo zmienne ;d
Wyglada to tak ze taki handler to jest anonimowa klasa, ktora ma 'wkompilowana' referencje do uzywanych stalych final (takie jakby 'closures'). Czyli po zakonczeniu dzialania tej funkcji te stale 'zyja nadal' poprzez referencje w obiektach anonimowych handlerow - dlatego tez nie zostana sprzatniete przez GC.
Dlaczego one musza byc final w Javie nigdy nie pojme, inne jezyki nie maja takich ograniczen. Nigdy tez nie szukalem info na ten temat, ale w sumie dobrze byloby sie dowiedziec.

1 użytkowników online, w tym zalogowanych: 0, gości: 1