为了活动小家电-kotlin的构造函数(三)

91 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的9天,点击查看活动详情

为了活动小家电吗,接着上篇搞!

以java风格初始化成员变量

让我们像在java中一样初始化成员变量。

var name, age, birthday创建每个并初始化它们,如下所示。

class Sample {

    var name: String = ""
    var age: Int = 0
    var birthday: String = ""

    constructor(name: String) {
        this.name = name
    }

    constructor(name: String, age: Int): this(name) {
        this.age = age
    }

    constructor(name: String, age: Int, birthday: String): this(name, age) {
        this.birthday = birthday
    }
}

我带来了我在java中看到的代码风格。默认在java中不起作用。

构造函数中的val、var使用

在构造函数中,只能var/val在顶级函数中使用这个。

init {}``constructor从定义的内容可以知道

constructor所以,在定义的时候,只能在最上层定义var/val

否则,您需要var定义并包含this.name = name.

现在default再来看看我们定义为值的代码。

class Sample constructor(val name: String, val age: Int = 0, val birthday: String = "")

省略构造函数

class Sample(val name: String, val age: Int = 0, val birthday: String = "")

可以如上定义。

如果你上面做了,Overloading你就不能在java中做到这一点。

使用 kotlin 构造函数和初始化

将构造函数和init结合起来使用java,推荐下面用的方式定义构造函数。

添加到顶级函数val name: String, val age: Int, val birthday: String

并且构造函数的其余部分被定义为只接收变量值。

init {}您可以在。

class Sample(val name: String, val age: Int = 0, val birthday: String = "1111-01-01") {

    constructor(name: String, age: Int): this(name, age, "1111-01-01")

    constructor(name: String): this(name, 10)

    init {
        println("名字: $name 年龄: $age 生日: $birthday")
    }
}
  1. Sample("帅哥1",18,"1112-01-01")
  2. Sample("帅哥2",19)
  3. Sample("帅哥3")

如上定义并输出,可以得到如下结果。

名字: 帅哥1 年龄: 18 生日: 1112-01-01
名字: 帅哥2 年龄: 19 生日: 1111-01-01
名字: 帅哥3 年龄: 10 生日: 1111-01-01

总结

kotlin 中的类在顶部包含一个省略号constructor()

所以init {}这总是首先被调用。

Java 必须定义一个样式才能有样式构造函数来拥有或拥有,或者最好使用最后推荐的方式

毕竟在java中不使用的话,定义好默认是没有问题的。