Je voudrais avoir un trait scellé qui a une méthode déclarée qui renvoie la classe réelle qui étend le trait. Dois-je utiliser un type abstrait, un type de paramètre ou y a-t-il une autre façon sympa de résoudre ce problème?Extension d'un trait et types
sealed trait Foo {
type T
def doit(other: T): T
}
ou
sealed trait Foo[T] {
def doit(other: T): T
}
Notez que T
doit être un sous-type de Foo
dans cet exemple. Si je le fais comme ce type d'information se sent trop répété:
case class Bar(name: String) extends Foo[Bar] {
def doit(other: Bar): Bar = ...
}
sons familiers. Pourriez-vous nous donner un exemple? – chrsan
Cela ne semble pas fonctionner si je veux retourner une nouvelle instance du même type? – chrsan
Oui - 'this.type' dépend du chemin: il est seulement valide pour retourner l'instance en cours –