È previsto che Java 8 conterrà alcune forme di lambda e supporto di chiusura, che rappresenterebbero un grande passo per la modernizzazione del linguaggio Java. Il problema è che le librerie esistenti basate su interfacce, come il framework di raccolta, non saranno in grado di utilizzare direttamente queste nuove funzionalità. Non è possibile aggiungere un metodo a un'interfaccia senza rompere le implementazioni esistenti, sarebbe semplice non compilare più.
Avere i lambda, ma non essere in grado di usarli facilmente con le raccolte standard, sarebbe una grande delusione per gli sviluppatori java. Per integrare lambda nelle raccolte standard, metodi come forEach
, map
o filter
sarebbero altamente desiderabili.
La soluzione a questo problema è aggiungere un'altra funzionalità, i metodi di estensione, che definiscono un'implementazione predefinita di un metodo in un'interfaccia. Sottoclassi esistenti utilizzerebbero il metodo predefinito, ma è anche possibile sovrascrivere il metodo con un'implementazione specializzata e possibile migliore.
Ulteriori informazioni sulla proposta del metodo di estensione sono disponibili su Java Enhancement Proposal 126.
fonte
2012-01-26 22:40:52
Questa è una grande estensione imo, porterà Java più vicino al mondo dell'eredità multipla senza tutti i suoi dettagli di implementazione disordinati. – Perception
@Perception "... senza tutti i suoi dettagli di implementazione disordinati ..." come esattamente? –
Concatenamento del concatenatore, Scontro potenziale del nome, ambiguità polimorfa, non parlo troppo della complessità aggiuntiva che dovrebbe essere definita nel compilatore. Tutti i motivi per cui i mixin sono più popolari dell'ereditarietà multipla in un sacco di lingue moderne e di cosa questa caratteristica mi ricordi di più. – Perception