Scala: como se referir ao tipo de uma classe de extensão em uma superclasse?
Existe uma maneira de definir um tipoT
nos Pais de tal forma queT
sempre se tornará o tipo real da classe de extensão (neste casoChild
)?
NoParent
, Quero impor / declararT
ser sempre do tipo extensível, como se eu tivesse escritotype T="type_of_the_extending_class"
em cada classe de extensão real sem escrever as linhastype T=Child1
noChild1
etc.
Portanto, o método Child1 deve aceitar apenas objetos Child1 como parâmetro e o método Child2 deve aceitar apenas objetos Child2. Existe uma maneira mais simples de aplicar isso? Existe uma maneira sem escrevertype T=ChildX
em cadaChildX
classe ? Existe uma maneira sem esse clichê?
Estive procurando uma solução nos livros Scala, mas não encontrei nenhuma.
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")
}