, Это было бы как:

мог найти ответ на этот вопрос в любом другом вопросе. Предположим, что у меня есть абстрактный суперкласс Abstract0 с двумя подклассами, Concrete1 и Concrete1. Я хочу иметь возможность определить в Abstract0 что-то вроде

def setOption(...): Self = {...}

где Self будет конкретным подтипом. Это позволило бы объединять вызовы в setOption следующим образом:

val obj = new Concrete1.setOption(...).setOption(...)

и все еще получайте Concrete1 как предполагаемый тип объекта.

То, что я не хочу, это определить это:

abstract class Abstract0[T <: Abstract0[T]]

потому что клиентам становится сложнее справляться с этим типом. Я пробовал различные возможности, включая абстрактный тип:

abstract class Abstract0 {
  type Self <: Abstract0
}

class Concrete1 extends Abstract0 {
  type Self = Concrete1
}

но тогда невозможно реализовать setOption, потому чтоthis в Abstract0 не имеет типа Self. И используяthis: Self => также не работает в Abstract0.

Какие есть решения для этой проблемы?

Ответы на вопрос(2)

Ваш ответ на вопрос