2013-06-11 13 views
7

Per quanto ne so, Groovy ha già mixin, Scala ha tratti. La famiglia C ha ereditarietà multipla. Quindi, perché la nuova funzionalità in Java è chiamata "metodi di estensione"? È solo un nome diverso per la stessa cosa, o c'era un'altra ragione? Quali sono le differenze tra tratti e mixaggi? cosa aggiungono e cosa mancano?Metodi di estensione di Java 8 - perché non vengono chiamati mixin o tratti?


Personalmente li vedo più come "metodi di implementazione" che come "metodi di estensione".

+5

Una grande differenza è che le interfacce non possono avere campi di istanza. – yshavit

risposta

7

Quindi perché la nuova funzionalità in Java è denominata "metodi di estensione"?

AFAIK, Questa denominazione proviene da C#. I metodi di estensione virtuale sono solo per metodi, mentre mixin e tratti si applicano anche ai campi.

Interface evolution via virtual extension methods Nota: Brian stesso li chiama "metodi Defender" ma suppongo che "i metodi di estensione virtuale" siano più ampiamente riconosciuti.

JVM Language Summit 2011 - Brian Goetz Sono sicuro che questo è il punto in cui parla del perché ha il nome.

+3

Bene, in realtà i mixin danno sia il comportamento che l'ereditarietà dello stato, mentre i tratti danno solo un comportamento. Lo so, Scala ha 'Tratti' e hanno ereditarietà dello stato ... ma per essere precisi quelli sono mixin. – Enkk

Problemi correlati