Me gustaría tener un rasgo sellado que tiene un método declarado que devuelve la clase real que extiende el rasgo. ¿Debo usar un tipo abstracto, un tipo de parámetro o ? ¿Hay alguna otra manera agradable de resolver esto?Extendiendo un rasgo y tipos
sealed trait Foo {
type T
def doit(other: T): T
}
o
sealed trait Foo[T] {
def doit(other: T): T
}
Tenga en cuenta que T
debe haber un subtipo de Foo
en este ejemplo. Si lo hago así la información de tipo siente demasiado repitió:
case class Bar(name: String) extends Foo[Bar] {
def doit(other: Bar): Bar = ...
}
suena familiar. ¿Podrías dar un ejemplo de esto? – chrsan
¿Qué parece no funcionar si quiero devolver una nueva instancia del mismo tipo? – chrsan
Sí - 'this.type' depende de la ruta: solo es válido para devolver la instancia actual –