有一个抽象类定义一个带有默认值的主构造函数变量,我们如何从子类中设置该不可变值

时间:2018-02-22 16:26:05

标签: kotlin

给出一个抽象类:

abstract class SuperClass(val someVal: String = "defaultValue") : SomeSuperClass 

我希望实现子类有两个构造函数,一个不能设置someVal,因此依赖"defaultValue",另一个设置不同的someVal,也就是说,val sc = SubClass()val sc2 = SubClass("anotherVal")

我试过了:

class SubClass() : SuperClass() {
    constructor(someVal: String) : this(someVal)

但是编译器抱怨道:

Error:(5, 37) Kotlin: There's a cycle in the delegation calls chain

如何实现它,保持someVal不可变?如下所示的解决方案无效,因为它是可变的:

abstract class SuperClass(var someVal: String = "defaultValue") : SomeSuperClass 


class SubClass() : SuperClass() {
    constructor(someVal: String) : this() {
        super.someVal = someVal
    }
}

1 个答案:

答案 0 :(得分:0)

如果省略主构造函数,则可以执行此操作:

class SubClass : SuperClass {
    constructor(someVal: String): super(someVal)
    constructor(): super()
}