2012-02-13 20 views
5

Cosa c'è di sbagliato nella classe interna esistente, perché la classe interna non può essere utilizzata per rappresentare la chiusura?Introduzione alle chiusure per JDK 1.8 - Progetto Lambda

Attualmente inserirò qui alcune risorse per iniziare con.

Prima di tutto, di seguito viene elencata una panoramica generale di cos'è la chiusura. È un linguaggio agnostico. Vi consiglio di leggerlo Chiusura http://martinfowler.com/bliki/Closure.html

ha aggiunto un po 'più tardi

[gennaio 2007] Una definizione di Chiusure http://gafter.blogspot.com/2007/01/definition-of-closures.html

FINE

[dicembre 2011] Stato della Lambda http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html

[Ottobre 2007] Argomenti avanzati in Programmazione Lingue: chiusure per Java http://www.youtube.com/watch?v=0zVizaCOhME

[4 gennaio 2011] JSR 292 bontà: Lambda per la conversione del tipo SAM utilizzando invokedynamic http://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type-conversion-using-invokedynamic

+0

Questo non è un posto dove porre domande di carattere generale, o di pubblicare informazioni generali. SO ha un insieme molto specifico di linee guida e il tuo post viola molti di essi. Si prega di leggere [faq] e [chiedere]. –

+0

Si prega di guardare http://stackoverflow.com/questions/36636/what-is-a-closure questa è una domanda molto più generale. – alexsmail

+1

@JimGarrison, ho ridotto la portata della domanda. Spero che ora sia ok. – alexsmail

risposta

0

classi interne possono essere utilizzati per fare molte delle cose chiusure possono fare per te.

Le chiusure presentano due importanti vantaggi: sono più semplici e più concisi e più probabilmente sono utilizzate. Sono meglio compresi dalla lingua e possono essere ottimizzati in modi che le classi interne non sono. per esempio. migliore gestione di specifiche eccezioni, gestione di primitive.

Le chiusure possono essere utilizzate per costruire altri metodi di prima classe, ad es. tramite curring. Non sono sicuro che questo sia un vantaggio, ma non è sicuramente un'opzione semplice con classi annidate.

+0

Ho pensato che fossero solo zucchero sintattico intorno alle classi interne (beh e qualche rielaborazione per il sistema dei tipi), vale a dire tutti gli stessi limiti che abbiamo ancora con loro? – Voo

+0

Si prega di consultare il link http://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type-conversion-using-invokedynamic sopra.L'attuale suggerimento _implementazione_ delle chiusure in Java è usare la classe interna e non MethodHandle. – alexsmail

+0

@Voo Se inizi a leggere i forum vedrai che ci sono molte persone che dicono che è il cambiamento _fundemantal_ nella lingua e non lo zucchero sintattico come tu e io lo vediamo. Guarda http://www.youtube.com/watch?v=0zVizaCOhME il link qui sopra, per esempio. – alexsmail

3

Come ho capito, il piano per le chiusure in Java 8 è solo per rendere meno di un dolore rispetto alle soluzioni attuali con le classi interne - perché sul serio, la sintassi classe interna è una testa enorme sintattica scrivere semplici lambda.

+0

Quindi, è solo "zucchero sintattico"? :-) – alexsmail

+0

Ho pensato che fosse. È? –

+1

Quello che pensavo. Fino a quando ho trovato 'MethodHandle'. E cambiare l'implementazione della chiusura e forzare. Ora, sono confuso. – alexsmail

Problemi correlati