Traços, herança e interfaces no Groovy, quando usá-los?


10

Estou aprendendo coisas legais e acabei de aprender sobre o novo recurso adicionado no 2.3, que é a adição de Traits . Agora, para mim, parece que os Traits permitem que você faça basicamente tudo o que uma superclasse e uma Interface podem fazer.

A adição de Traits ao Groovy torna a herança e as interfaces obsoletas?

E se não, qual é o melhor momento para usar cada um desses mecanismos?



"groovy e eu acabei de aprender sobre o novo recurso adicionado no 2.3, que é a adição de Traits" - Os traits foram adicionados pela primeira vez ao Groovy pré-2.0 por meio de um complemento AST chamado booster Groovy ++, consulte code.google.com/p / groovypptest / wiki / Traits
Vorg van Geir

Você realmente deve ler os documentos sobre características. Nenhuma resposta fornecida aqui será completa sem mencionar tudo o que esses documentos falam; Você deve prestar especial atenção às seções 13 - final
smac89 23/06/19

Respostas:


4

Os traços combinam o melhor dos dois mundos - a herança de classes (abstratas) e a implementação de interfaces. Uma característica pode conter implementações padrão de métodos e, no entanto, um tipo pode implementar várias características ao mesmo tempo. Isso permite algum tipo de herança múltipla, mas de uma maneira boa, evitando o diamante mortal da morte .

Se você não sabe como começar, use traços. Você ganha flexibilidade e pode mudar para interfaces ou herança de classe posteriormente, se necessário.


3
Nas interfaces, você pode definir o método padrão. Qual é a diferença lógica?
Gilad Baruchian

Também estou confuso com a diferença entre características e métodos padrão da interface. Só posso supor traços em Groovy foram introduzidas mais cedo do que os métodos padrão em java
olyv

Uma característica permite que você defina campos regulares, não apenas campos estáticos como limites de interface de Java É a
smac89

Se você estiver confuso sobre características, leia os documentos . Eles são muito informativos
smac89 23/06/19

11
@ smac89, obrigado, isso foi realmente útil!
22719 olyv
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.