2011-01-21 12 views
13

Sono in grado di vedere alcuni dei vantaggi delle chiusure, come ad esempio il modo in cui possono avere il loro posto nel semplificare le librerie esistenti e rendere il design futuro più semplice ed efficiente.In che modo le chiusure in Java consentono alla progettazione dell'API di sostituire la progettazione della lingua?

Tuttavia, uno dei punti chiave menzionati nel progetto di proposta (http://www.javac.info/consensus-closures-jsr.html) è nella sezione 2.5, punto e:

(La specifica migliorerà la lingua di)

e) che consente la futura progettazione dell'API per sostituire la progettazione della lingua per l'estensione della piattaforma Java.

sto lottando per vedere come questo è il caso, sicuramente progettazione del linguaggio è proprio questo - la progettazione del linguaggio stesso, e non può essere sostituito da un API Java a meno che non si apre tutta una serie di API strani utilizzando chiusure per modificare la lingua (che dubito fortemente che accada).

Qualcuno può far luce su questo e forse fornire un esempio di qualcosa che ha richiesto un cambio di lingua in precedenza ma, con l'aggiunta di chiusure, non richiede più uno?

risposta

6

In alcuni punti, le funzionalità di progettazione e lingua dell'API sono decisamente intercambiabili. Basta guardare qualcosa come la parola chiave sincronizzata in Java. È una parola chiave, ma potrebbe anche essere implementata come un'API se il linguaggio fosse sufficientemente non verboso. Le annotazioni sono un altro esempio. Il contrario di un'annotazione @Stateless che rende tutti i metodi in una transazione transazionale, potrebbe anche essere stata una parola chiave della lingua.

Le chiusure in particolare facilitano la consegna di un "blocco di codice" a un metodo, che potrebbe quindi fare qualcosa con quello.

Un esempio di greggio, una per ciascuna potrebbe essere fatto:

for_each(myFooList, #(Foo foo) { 
    String something = foo.getBar() + foo.getKaz(); 
    System.out.println(something); 
}); 

Forse non al 100% pulito come avere la per ogni loop direttamente supportato dalla sintassi del linguaggio, ma permette a tutti di facile esperienza con miglioramenti linguistici.

+0

Sta anche guardando una delle vecchie proposte di chiusura per java, in cui uno degli obiettivi era quello di avere una sintassi che fosse ancora più simile a Ruby (cioè ancora meno stoneme nel ciclo 'for_each') rispetto a quello di cui stanno discutendo ora . –

6

Per chi non ha letto il progetto di proposta, ecco un po 'più in dettaglio dal più avanti nello stesso documento:

L'aggiunta di chiusure semplifica l'evoluzione della piattaforma Java. Molte RFE linguistiche esistenti nel database di bug pubblico di Sun possono essere ridisposte come richieste API per i metodi che ricevono le chiusure. Molte esigenze future di moduli di dichiarazione aggiuntivi possono essere soddisfatte mediante l'aggiunta di metodi di libreria.

Problemi correlati