Scala Language
Zelf typen
Zoeken…
Syntaxis
- eigenschap Type {selfId => / andere leden kunnen verwijzen naar
selfIdin het gevalthisiets betekent /} - eigenschap Type {selfId: OtherType => / * andere leden kunnen
selfIden het zal van het typeOtherType* / zijn - eigenschap Type {selfId: OtherType1 met OtherType2 => / *
selfIdis van het typeOtherType1enOtherType2* /
Opmerkingen
Vaak gebruikt met het cakepatroon.
Eenvoudig zelftype voorbeeld
Zelftypen kunnen in eigenschappen en klassen worden gebruikt om beperkingen te definiëren voor de concrete klassen waaraan het is gemengd. Het is ook mogelijk een andere identificator te gebruiken voor this gebruik van deze syntax (nuttig bij buitenobject moet worden verwezen vanuit een inwendig object).
Stel dat u enkele objecten wilt opslaan. Daarvoor maakt u interfaces voor de opslag en voegt u waarden toe aan een container:
trait Container[+T] {
def add(o: T): Unit
}
trait PermanentStorage[T] {
/* Constraint on self type: it should be Container
* we can refer to that type as `identifier`, usually `this` or `self`
* or the type's name is used. */
identifier: Container[T] =>
def save(o: T): Unit = {
identifier.add(o)
//Do something to persist too.
}
}
Op deze manier bevinden die zich niet in dezelfde objecthiërarchie, maar PermanentStorage kan niet worden geïmplementeerd zonder ook Container implementeren.
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow