Traits, héritage et interfaces dans Groovy, quand les utiliser?

10

J'apprends le groovy et je viens d'apprendre la nouvelle fonctionnalité ajoutée en 2.3, qui est l'ajout de Traits . Maintenant, il me semble que les Traits vous permettent de faire essentiellement tout ce qu'une super-classe et une interface peuvent faire.

L'ajout de Traits à Groovy rend-il l'héritage et les interfaces obsolètes?

Et sinon, quel est le meilleur moment pour utiliser chacun de ces mécanismes?

Ryan Stull
la source
"groovy et je viens d'apprendre la nouvelle fonctionnalité ajoutée en 2.3, qui est l'ajout de Traits" - Les traits ont d'abord été ajoutés à Groovy pré-2.0 via un addon AST appelé le booster Groovy ++, voir code.google.com/p / groovypptest / wiki / Traits
Vorg van Geir
Vous devriez vraiment lire les documents sur les traits. Aucune réponse donnée ici ne sera complète sans mentionner tout ce dont ces documents parlent; Vous devriez faire particulièrement attention aux sections 13 - fin
smac89

Réponses:

4

Les traits combinent le meilleur des deux mondes - l'héritage de classes (abstraites) et l'implémentation d'interfaces. Un trait peut contenir des implémentations par défaut de méthodes et pourtant un type peut implémenter plusieurs traits à la fois. Cela permet une sorte d'héritage multiple, mais dans le bon sens, en évitant le diamant mortel de la mort .

Si vous ne savez pas par où commencer, utilisez des traits. Vous gagnez en flexibilité et pouvez basculer vers les interfaces ou l'héritage de classe ultérieurement si nécessaire.

fxfour
la source
3
Dans les interfaces, vous pouvez définir la méthode par défaut, alors quelle est la différence logique?
Gilad Baruchian
je suis également confondu avec la différence entre les traits et les méthodes par défaut de l'interface. Je ne peux que supposer que les traits dans groovy ont été introduits plus tôt que les méthodes par défaut dans java
olyv
Un trait vous permet de définir des champs réguliers, pas seulement des champs statiques car l'interface de java vous limite à
smac89
Si vous êtes confus au sujet des traits, lisez les documents . Ils sont très instructifs
smac89
1
@ smac89, merci, c'était vraiment utile!
olyv