说我有open class C(val c:C)
,我想将其子类化为class D():C(this)
根据编译器,这是无效的,因为'this' is not defined in this context
有没有办法让这个做我想要的?具体来说,我希望D
有一个可以在没有任何参数的情况下调用的构造函数,并将构造的D
对象传递给C
的构造函数。就我而言,这个对象可能还没有完全构建,这很好。
我对任何不涉及改变C
,包括反思的解决方案持开放态度。
答案 0 :(得分:2)
没有直接的解决方案,因为它似乎不是一个好主意。
超类的构造函数在类本身的构造函数(more details here)之前执行。因此,将尚未初始化的this
实例传递给超级构造函数代替有效实例可能会破坏超级构造函数的某些逻辑(例如,它可能期望c
的属性为有一些有意义的价值观,但他们没有。)
如果您需要这么糟糕,可以尝试先使用一些假/默认D
创建C
的实例,然后使用第一个创建另一个D
:
class D(c: C) : C(c)
fun createD(defaultC: C): D {
val firstD = D(defaultC)
return D(firstD)
}
虽然这绝对不包括所有可能的用例。