, Это было бы как:
мог найти ответ на этот вопрос в любом другом вопросе. Предположим, что у меня есть абстрактный суперкласс 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.
Какие есть решения для этой проблемы?