• 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)
        }
    
        
    }
  • 相关阅读:
    信号
    序列化数据的两种方式
    ModelForm的使用
    分页模板
    Django中间件进行用户登陆验证
    Flask 笔记一
    pipenv 使用基本命令
    git本地文件 上传 远程仓库
    service "$service" status 返回的状态
    &>/dev/null 的作用
  • 原文地址:https://www.cnblogs.com/yangxusun9/p/12769001.html
Copyright © 2020-2023  润新知