• 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)
        }
    
        
    }
  • 相关阅读:
    Android:res之layer-list的用法
    Android:改变Activity切换方式
    Android:dimen尺寸资源文件的使用
    Android Studio安装、配置
    Android Studio 初探
    Android SDK开发包国内下载地址
    linux下centos安装android sdk最新全面教程【可行】
    CentOS 7.0安装Nvidia驱动
    javascript基础部分
    js api 实现钉钉免登
  • 原文地址:https://www.cnblogs.com/yangxusun9/p/12769001.html
Copyright © 2020-2023  润新知