Scala: как ссылаться на тип расширяющего класса в суперклассе?
Есть ли способ определить типT
у родителя такой, чтоT
всегда будет фактическим типом расширяющего класса (в этом случаеChild
)?
ВParent
Я хочу обеспечить / объявитьT
быть всегда расширяющим типом, как если бы я написалtype T="type_of_the_extending_class"
в каждом фактическом расширяющем классе, не записывая строкиtype T=Child1
вChild1
и т.п.
Таким образом, метод Child1 должен принимать только объекты Child1 в качестве параметра, а метод Child2 должен принимать только объекты Child2. Есть ли более простой способ обеспечить это? Есть ли способ без написанияtype T=ChildX
в каждомChildX
учебный класс ? Есть ли способ без этого шаблона?
Я искал решение в книгах Scala, но не нашел ни одного.
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")
}