美文网首页
5.Kotlin构造方法详解与初始化过程分析

5.Kotlin构造方法详解与初始化过程分析

作者: leofight | 来源:发表于2017-12-23 11:35 被阅读0次

1. primary与secondary构造方法

对于一个secondary的构造方法,必然会直接或间接的调用primary构造方法。

  • 示例代码
class Person constructor(username: String) {//primary构造方法

    private var username: String

    private var age: Int

    private var address: String

    init {
        println(username)

        this.username = username
        this.age = 20
        this.address = "beijing"
    }

    //secondary构造方法
    constructor(username: String, age: Int) : this(username) {
        println(username + "," + age)

        this.username = username
        this.age = age
        this.address = "beijing"
    }

    //secondary构造方法
    constructor(username: String, age: Int, address: String) : this(username, age) {
        this.address = address
    }

    fun printInfo() {
        println("username: ${this.username},age:${this.age},address:${this.address}")
    }
}

fun main(args: Array<String>) {
    val person = Person("zhangsan")
    var person2 = Person("lisi", 30)
    var person3 = Person("wangwu", 40, "hangzhou")

    person.printInfo()
    person2.printInfo()
    person3.printInfo()
}
  • 运行结果
zhangsan
lisi
lisi,30
wangwu
wangwu,40
username: zhangsan,age:20,address:beijing
username: lisi,age:30,address:beijing
username: wangwu,age:40,address:hangzhou

2.针对上述代码使用另一个方式实现

  • 示例代码
package com.leofight.kotlin


class Student(private val username: String, private val age: Int, private var address: String) {
    fun printInfo() {
        println("username:$username,age:$age,address:$address")
    }
}

/**
 * 如果构造方法拥有注解或是可见性修饰符,
 * 那么constructor关键字就是不能省略掉的,并且它位于修饰符后面
 */
class Student2 constructor(username: String) {

}

/**
 * 在JVM上,如果类primary构造方法所有参数都拥有默认值,那么kotlin编译器就会为这个类生成一个不带参数的构造方法,
 * 这个不带参数的构造方法会使用这些参数的默认值,这样做的目的在于可以跟Spring等框架更好地集成。
 */
class Student3(val username: String = "zhangsan") {

}

fun main(args: Array<String>) {
    val student = Student("zhangsan", 20, "shenzhen")
    student.printInfo()

    var student3 = Student3();
    println(student3.username)
}
  • 运行结果
username:zhangsan,age:20,address:shenzhen
zhangsan

1)如果构造方法拥有注解或是可见性修饰符,那么constructor关键字就是不能省略掉的,并且它位于修饰符后面。
2)在JVM上,如果类primary构造方法所有参数都拥有默认值,那么kotlin编译器就会为这个类生成一个不带参数的构造方法,这个不带参数的构造方法会使用这些参数的默认值,这样做的目的在于可以跟Spring等框架更好地集成。

相关文章

网友评论

      本文标题:5.Kotlin构造方法详解与初始化过程分析

      本文链接:https://www.haomeiwen.com/subject/ccifgxtx.html