Tradiční řešení přístupu k lokálním proměnným je zabalit je do pole o velikosti jedna.
final int[] y = new int[1]; y[0] = 0; new Runnable() { public void run() { y[0]++; } }.run(); assert y[0] == 1;
Neexistuje jediný technický důvod, proč by překladač Javy nemohl automaticky balit proměnné ze zásobníku. Lidé by pak klidně mohli psát:
int y = 0; new Runnable() { public void run() { y++; } }.run(); assert y == 1;
což by bylo přirozené a čitelnější. Překladač by to pak upravil do výše popsané formy pole s jedním prvkem. Všichni vědí, že by to šlo a čas od času někdo i navrhne, že by se to mohlo udělat. Bohužel tento nápad má v Santa Kláře vlivné odpůrce, kteří jej vždy smetou ze stolu.
Mám pocit, že jeden z návrhů na lambdy obsahoval i možnost plnohodnotného přístupu na lokální proměnné (snad se musely oanotovat pomocí @Shared), ale nevsadil bych si na to, že projde.