Zoeken…


Invoering

Kenmerken zijn structurele constructieobjecten in de Groovy-taal. Kenmerken maken implementatie van interfaces mogelijk. Ze zijn compatibel met statische typecontrole en compilatie. Traits gedragen zich als interfaces met standaardimplementaties en -status. Verklaring van een eigenschap is met behulp van het kenmerk trefwoord. ---------- Traits methoden scope ondersteunen alleen publieke en private methoden.

Basisgebruik

Een trait is een herbruikbare set methoden en velden die aan een of meer klassen kunnen worden toegevoegd.

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

Ze kunnen worden gebruikt als normale interfaces, met behulp implements sleutelwoorden voor implements :

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

Ze kunnen ook worden gebruikt om meervoudige overerving te implementeren (waardoor diamantproblemen worden voorkomen).

Honden kunnen aan zijn hoofd krabben, dus:

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!!"

Meervoudig overervingsprobleem

Klasse kan meerdere eigenschappen implementeren. In het geval dat een eigenschap methode definieert met dezelfde handtekening als een andere eigenschap, is er een probleem van meervoudige overerving. In dat geval wordt de methode uit de laatst opgegeven eigenschap gebruikt:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow