首页 > 解决方案 > 在 Kotlin 中使用包裹在 {} 中的类和包裹在 () 中的类有什么区别

问题描述

我在编写 kotlin 时偶然发现了这段代码,但有点困惑有什么区别:

class SmsData (
    private var _id : String,
    private var thread_id : String,
)

class SmsData {
    private var _id : String = ""
    private var thread_id : String = ""
}

我刚从 Java 进入 Kotlin,想用 getter 和 setter 创建一个普通的对象。请问他们有什么区别?

标签: kotlin

解决方案


这是主构造函数的声明:

class SmsData (
    private var _id: String,
    private var thread_id: String,
)

因此,您将无法创建没有参数的此类的实例:

SmsData() // compilation error

而第二个类声明只是一个具有两个私有成员的类。您仍然可以调用不带参数的默认构造函数:

class SmsData {
    private var _id: String = ""
    private var thread_id: String = ""
}

...

SmsData() // no errors

这是您可以改进的方法!

将默认值添加到主要构造函数参数。因此,您可以使用 0、1(第一个或第二个)或 2 个参数调用主构造函数:

class SmsData (
    private var _id: String = "default_value",
    private var thread_id: String = "default_value"
)

...

// no errors
SmsData()
SmsData("id_value")
SmsData(_id = "id_value")
SmsData(thread_id = "thread_id_value")
SmsData("id_value", "thread_id_value")

推荐阅读