Le interfacce con i metodi di estensione virtuale di Java 8 sono le stesse di Mixin?

7

Questo post descrive una nuova funzionalità in Java 8 chiamata metodi di estensione virtuale (precedentemente denominati metodi predefiniti o metodi di difesa). Nell'esempio fornito, un'interfaccia ha un metodo, che è implementato da una classe. Quindi viene aggiunto un secondo metodo, ma invece di forzare la classe ad implementare immediatamente il nuovo metodo dell'interfaccia, viene creato un "metodo di estensione virtuale" all'interno dell'interfaccia come implementazione di questo nuovo metodo, quindi la classe non ha bisogno di implementare il nuovo metodo subito.

Diciamo che il programmatore decide di creare un metodo di estensione virtuale in un'interfaccia e non prevede mai che le sottoclassi implementino la propria versione. Non sarebbe un mixin? Sembra uno per me, ma non l'ho mai sentito nominare come tale. C'è qualche differenza fondamentale che non capisco?

    
posta Thunderforge 19.11.2013 - 18:43
fonte

2 risposte

6

Sì, questi sono mixin. Non sono potenti come i tratti di Scala (nessuna capacità di avere un riferimento all'oggetto "self" genitore e alle sue proprietà o metodi), ma i metodi predefiniti possono implementare un comportamento significativo e quindi possono essere più che attaccare i cerotti per fermare l'esistente interruzione di codice quando viene estesa un'interfaccia.

Il potere limitato dei metodi predefiniti sembra essere deliberato, a giudicare dalle varie discussioni dei la caratteristica. Il consiglio dei progettisti è che i metodi predefiniti non dovrebbero generalmente contenere l'implementazione concreta di un metodo, ma accettare una lambda o un riferimento a una classe concreta, che può fornire l'implementazione. Esempio here

    
risposta data 19.11.2013 - 18:56
fonte
2

È simile a un mix-in, ma non così potente dal momento che un'interfaccia non può contenere dati.

    
risposta data 19.11.2013 - 18:57
fonte

Leggi altre domande sui tag