Я хотел бы иметь запечатанную черту, у которой есть объявленный метод, который возвращает
фактический класс, который расширяет черту. Должен ли я использовать абстрактный тип, тип параметра или
Есть ли другой хороший способ решить эту проблему?
sealed trait Foo {
type T
def doit(other: T): T
}
или
sealed trait Foo[T] {
def doit(other: T): T
}
Обратите внимание, что T
должен быть подтипом Foo
в этом примере. Если я делаю это так, типа
информация кажется слишком повторной:
case class Bar(name: String) extends Foo[Bar] {
def doit(other: Bar): Bar = ...
}