Kotlin有主构造函数和辅助构造函数以及init块.我们不能在主构造函数中执行任何代码.因此,Kotlin提供了一个init块,它在实例创建后立即执行其中的代码.

我找不到任何不能用主块和初始化块解决的问题. 我不认为这与任何性能问题有关.

我的问题是,为什么我们有一个辅助构造函数,为什么我们应该使用一个辅助构造函数?

推荐答案

它适用于需要将不同的参数类型传递给构造函数的情况.

例如,假设您有一个类表示一个人及其出生月份.出生月份由Month Enum类表示.但有时将月份的数字表示用作Int可能会很方便.

data class Person(
    val name: String,
    val birthMonth: Month
) {

    constructor(name: String, birthMonth: Int): this(name, Month.of(birthMonth))
}

或者,如果要构建树,可以在创建 node 时自动将 node 添加到其父 node ,这可能会很方便:

class Node(
    val name: String
) {
    val children = mutableListOf<Node>()

    constructor(name: String, parentNode: Node): this(name) {
        parentNode.children.add(this)
    }
}

Kotlin相关问答推荐

Compose:LaunchedEffect在密钥更改后不会重新启动

"Kotlin中的表达式

Kotlin编译器如何决定是否可以在任何给定点调用Suspend方法?

当我通过媒体通知更改音乐时不要更新我的 UI

在 kotlin 中使具体化字段可选

如何从 Period.between() 返回的字符串中提取信息? (Kotlin )

区分函数和扩展

Kotlin 列表扩展功能

是否可以通过超时暂停协程?

Android 在将 androidx 生物识别更新为 1.0.0-alpha04 后崩溃

Anko 中的水平线性布局

如何在 kotlin 的片段类中更改 ActionBar 标题?

Mockito 的 argThat 在 Kotlin 中返回 null

Kotlin默认使用哪种排序?

Kotlin内联扩展属性

Kotlin 中的内联构造函数是什么?

使用主构造函数时使用Kotlin getter/setter

Kotlin中的属性(properties)和参数(parameters)有什么区别?

使用 Moshi/Retrofit2 访问深度嵌套的 JSON 数组

Dagger 2 androidx fragment不兼容类型