Kotlin的构造方法探究

Posted soclear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin的构造方法探究相关的知识,希望对你有一定的参考价值。

Kotlin的构造方法探究

前言:
我在学习kotlin的构造方法时,对书上网上的一些说法产生了疑问。
不知是他们的说法不够准确和完美,还是我的认知错误。
我会对下面的说法提出不同意见,请大佬批评(如果有人看到我这篇文章的话,狗头)。

1.有且仅有一个主构造方法

我的看法:可以没有主构造方法,仅有0个至多个副构造方法
首先明确在哪里写算作主构造方法——在类的首部(class header)而不是在类体中(class body)。
比如这种情况,没有主构造方法,只有一个副构造方法:

//没有主构造方法,只有一个副构造方法
class Human1{
    //在类体中写的副构造方法
    constructor(name: String)
}

这段代码idea只是警告,说是建议写成主构造方法的格式,但是可以编译通过。这是不是算作kotlin可以允许没有主构造方法呢?

还有一种情况:没有主构造方法,只有多个副构造方法:

class Human2 {
    constructor(name: String) {
        println(name)
    }

    constructor(age: Int) {
        println(age)
    }

}

这段代码在idea中甚至没有给出警告。

2.副构造方法必须调用主构造方法

这个问题有点类似上一个问题,
我的看法:副构造方法可以不调用主构造方法。
比如:

class Human3 {
    constructor(name: String) {
        println(name)
    }

    constructor(age: Int) {
        println(age)
    }

}

这里是不是因为没有主构造方法,因而不需要调用主构造方法呢?
下面再看一个例子:

class Human4(){
    constructor(name: String) : this() {
        println(name)
    }

    constructor(age: Int) : this() {
        println(age)
    }
}

可以看到,在Human4这个类上添加了一个空的主构造方法,就导致在这个类的副构造方法必须调用这个空的主构造方法。
由此看出,副构造方法在没有主构造方法的时候,不调用主构造方法。(有点像废话??),而在有主构造方法的时候,必须调用主构造方法。

这些结论仅仅基于我浅薄的认知,欢迎批评。

以上是关于Kotlin的构造方法探究的主要内容,如果未能解决你的问题,请参考以下文章

将接口从片段传递到kotlin中的活动

调用 Fragment 构造函数导致异常,kotlin?

Android 学习之《第一行代码》第三版 笔记Kotlin 继承时的括号到底写不写

Kotlin 遇到 MyBatis:到底是 Int 的错,还是 data class 的错?

从点滴基础探究Kotlin的独特魅力

Kotlin - 如何将空值传递给片段 newInstance 方法?