Ricerca…


introduzione

I tratti sono oggetti di costruzione strutturale nella lingua Groovy. I tratti consentono l'implementazione di interfacce. Sono compatibili con il controllo di tipo statico e la compilazione I tratti si comportano come interfacce con le implementazioni e lo stato predefiniti. La dichiarazione di un tratto è utilizzando la parola chiave tratto . ---------- I metodi dei metodi supportano solo metodi pubblici e privati .

Uso di base

Un trait è un set riutilizzabile di metodi e campi che possono essere aggiunti a una o più classi.

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

Possono essere usati come normali interfacce, usando la parola chiave implements :

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

Inoltre possono essere utilizzati per implementare l'ereditarietà multipla (evitando il problema dei diamanti).

I cani possono grattarsi la testa, quindi:

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 di ereditarietà multipla

La classe può implementare più tratti. Nel caso in cui un tratto definisca un metodo con la stessa firma come un altro tratto, c'è un problema di ereditarietà multipla. In tal caso viene utilizzato il metodo dall'ultimo tratto dichiarato :

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow