Scala: ¿cómo referirse al tipo de una clase extendida en una superclase?
¿Hay alguna manera de definir un tipoT
en Parent tal queT
siempre se convertirá en el tipo real de la clase extendida (en este casoChild
)?
EnParent
, Quiero hacer cumplir / declararT
ser siempre el tipo extensor, como si hubiera escritotype T="type_of_the_extending_class"
en cada clase que se extiende sin escribir las líneastype T=Child1
enChild1
etc.
Por lo tanto, el método Child1 solo debe aceptar objetos Child1 como parámetro y el método Child2 solo debe aceptar objetos Child2. ¿Hay una manera más simple de hacer cumplir esto? ¿Hay alguna manera sin escribir?type T=ChildX
en cadaChildX
clase ? ¿Hay alguna manera sin este repetitivo?
He estado buscando una solución en los libros de Scala pero no encontré ninguna.
abstract class Parent{
type T<:Parent
def method(t:T)
}
class Child1 extends Parent{
type T=Child1
override def method(t:T)=t.child1method
def child1method=println("child1's method")
}
class Child2 extends Parent{
type T=Child2
override def method(t:T)=t.child2method
def child2method=println("child2's method")
}