Java 7
Posted by Andrea Nasato Wed, 13 Sep 2006 10:55:00 GMT
No, non avete letto male, non è ancora uscita la release ufficiale di Java 6, che già si pensa a cosa inserire in Java 7.
In questi giorni si è aperta nella blogosfera che ruota attorno a Java una piccola guerra di religione sulla necessità o meno di inserire le chiusure nel linguaggio.
Per chi è avezzo di Smalltalk, Ruby o anche C# il concetto di chiusura è familiare. Per chi invece ha visto solo Java, il concetto è nuovo (o quasi).
Brevemente un closure è una funzione dichiarata all’interno di un’altra funzione della quale condivide le variabili. Neil Gafter (già co-autore del Collection Framework) propone che questo tipo di costrutto sia inserito anche all’interno di Java.
Il concetto non è completamente nuovo perché in Java esistono già dei costrutti simili, le classi interne anonime, che svolgono grossomodo lo stesso compito, con due differenze, secondo Gafter, importanti:
- Le classi interne anonime possono lavorare con variabili del metodo che le contiene solo se queste sono dichiarate
final
. - La sintassi che si ottiene con le chiusure è più semplice e pulita.
Vediamo un piccolo esempio del secondo punto. Supponiamo di avere un metodo che ha il compito di sottomettere un task ad un altro thread (usando java.util.concurrent.Executor
).
Con le classi anonime scriveremmo il seguente codice:
void sayHelloInAnotherThread(Executor ex) {
ex.execute(new Runnable() {
public void run() {
System.out.println("hello");
}
});
}
mentre con le chiusure potremmo scrivere (la sintassi è ancora oggetto di discussione):
void sayHelloInAnotherThread(Executor ex) {
ex.execute(() {
System.out.println("hello");
});
}
La questione è aperta. Anche James Gosling ha espresso dubbi circa la vera utilità di tale feature.
Staremo a vedere.
Il problema più grosso delle closure in java è che saranno ‘ingessate’ dentro la sintassi del linguaggio.. nonostante questo, a mio avviso saranno una di quelle feature che, una volta usate, non abbandoni più ;-)
Thank you so much! This is what I need to find.