Scala 中 辅助构造器定义顺序

问题

错误代码如下

object Obj3 {
    def main(args: Array[String]): Unit = {
        val u31 = new User3(20)
        println(u31.age)
    }
}

class User3(var name: String) {
    var age: Int = _
    
    // 辅助构造器1
    def this() = {
        
        // 注意: 首行必须是调用自己的主构造器
        this("lisi")
    }

    //辅助构造器2
    def this(age: Int) = {
        
        this(false)
    }
    //辅助构造器3
    def this(a: Boolean) = {
        this()
        println(a)
    }

    
}

想实现的逻辑是:

  辅助构造器2调用辅助构造器3 ——》辅助构造器3调用辅助构造器1——》辅助构造器1调用主构造器完成实例化

结果运行时报错

Error:(28, 9) called constructor's definition must precede calling constructor's definition
this(false)

 原因

Scala中要求被调用的构造器要在调用之前声明,我是这么理解的,辅助构造器可以看作主构造器中的函数,函数是要先声明再使用的

正确代码如下

object Obj3 {
    def main(args: Array[String]): Unit = {
        val u31 = new User3(20)
        println(u31.age)
    }
}

class User3(var name: String) {
    var age: Int = _
    
    // 辅助构造器1
    def this() = {
        
        // 注意: 首行必须是调用自己的主构造器
        this("lisi")
    }

    //辅助构造器3
    def this(a: Boolean) = {
        this()
        println(a)
    }
    //辅助构造器2
    def this(age: Int) = {

        this(false)
    }

    
}

猜你喜欢

转载自www.cnblogs.com/yangxusun9/p/12769001.html