Tratti, ereditarietà e interfacce in Groovy, quando usarli?


10

Sto imparando groovy e ho appena imparato a conoscere la nuova funzionalità aggiunta in 2.3, che è l'aggiunta di Traits . Ora a me sembra che i tratti ti permettano di fare praticamente tutto ciò che una superclasse e un'interfaccia possono fare.

L'aggiunta di Traits a Groovy rende obsolete l'ereditarietà e le interfacce?

E se no, qual è il momento migliore per utilizzare ciascuno di questi meccanismi?



"groovy e ho appena appreso della nuova funzionalità aggiunta in 2.3, che è l'aggiunta di Traits" - I tratti sono stati inizialmente aggiunti a Groovy precedente alla 2.0 tramite un addon AST chiamato booster Groovy ++, vedi code.google.com/p / groovypptest / wiki / Traits
— Vorg van Geir,

Dovresti davvero leggere i documenti sui tratti. Nessuna risposta fornita qui sarà completa senza menzionare tutto ciò di cui parlano questi documenti; Prestare particolare attenzione alle sezioni 13 - fine
— smac89 del

Risposte:


4

I tratti combinano il meglio di entrambi i mondi: l'eredità delle classi (astratte) e l'implementazione delle interfacce. Un tratto può contenere implementazioni predefinite di metodi e tuttavia un tipo può implementare più tratti contemporaneamente. Ciò consente una sorta di eredità multipla, ma in senso buono, evitando il mortale diamante della morte .

Se non sai come iniziare, usa i tratti. Ottieni flessibilità e puoi passare alle interfacce o all'eredità delle classi in seguito, se necessario.


3
Nelle interfacce è possibile definire il metodo predefinito, quindi qual è la differenza logica?
— Gilad Baruchian,

Sono anche confuso con la differenza tra tratti e metodi predefiniti dell'interfaccia. Posso solo supporre che i tratti in groovy siano stati introdotti prima dei metodi predefiniti in java
— olyv,

Un tratto ti consente di definire campi regolari, non solo campi statici come l'interfaccia di java ti limita a
— smac89

Se sei confuso sui tratti, leggi i documenti . Sono molto istruttivi
— smac89,

1
@ smac89, grazie, è stato davvero utile!
— olyv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.