Buscar..


Introducción

Los rasgos son objetos de construcción estructural en el lenguaje Groovy. Los rasgos permiten la implementación de interfaces. Son compatibles con la comprobación de tipos estáticos y los rasgos de compilación se comportan como interfaces con implementaciones y estados predeterminados. La declaración de un rasgo es mediante el uso de la palabra clave del rasgo . ---------- El ámbito de los métodos de rasgos solo admite métodos públicos y privados .

Uso básico

Un trait es un conjunto reutilizable de métodos y campos que se pueden agregar a una o más clases.

trait BarkingAbility {
    String bark(){ "I'm barking!!" }
}

Se pueden usar como interfaces normales, usando la palabra clave implements :

class Dog implements BarkingAbility {}
def d = new Dog()
assert d.bark() = "I'm barking!!"

También se pueden usar para implementar herencia múltiple (evitando el problema del diamante).

Los perros pueden rascarse la cabeza, así que:

trait ScratchingAbility {
    String scratch() { "I'm scratching my head!!" }
}

class Dog implements BarkingAbility, ScratchingAbility {}
def d = new Dog()
assert d.bark() = "I'm barking!!"
assert d.scratch() = "I'm scratching my head!!"

Problema de herencia múltiple

La clase puede implementar múltiples rasgos. En caso de que si un rasgo define el método con la misma firma como otro rasgo, hay un problema de herencia múltiple. En ese caso se utiliza el método del último rasgo declarado :

trait Foo {
  def hello() {'Foo'}
}
trait Bar {
  def hello() {'Bar'}
}

class FooBar implements Foo, Bar {}

assert new FooBar().hello() == 'Bar'


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow