Передача 'этого' конструктору

Скажем, у меня есть open class C(val c:C) и я хочу подклассифицировать его как class D():C(this)

Это недопустимо в соответствии с компилятором, потому что 'this' is not defined in this context

Есть ли способ заставить это делать то, что я хочу? В частности, я хотел бы, чтобы у D был конструктор, который можно вызвать без каких-либо аргументов, и передаст объект D будет сконструирован для конструктора C В моем случае, это прекрасно, что этот объект еще не полностью построен.

Я открыт для любых решений, которые не связаны с изменением C , включая отражение.

Нет простого решения, потому что это не кажется хорошей идеей.

Конструктор суперкласса выполняется перед тем, как сам конструктор класса ( подробнее здесь ). Таким образом, передача this экземпляра, который не был инициализирован вообще супер-конструктору вместо допустимого экземпляра, может нарушить некоторую логику суперструктора (например, он может ожидать, что свойства c имеют некоторые значимые значения, но они не «т).

Если вам это так плохо, вы можете попытаться создать экземпляр D сначала с помощью fake / default C , а затем создать другой D с первым:

 class D(c: C) : C(c) fun createD(defaultC: C): D { val firstD = D(defaultC) return D(firstD) } 

Хотя это определенно не охватывает все возможные варианты использования.