kotlin - 在 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 创建一个普通的对象。请问他们有什么区别?
解决方案
这是主构造函数的声明:
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")
推荐阅读
- pyspark - 如何使用 spark/databricks 调整存储容器中的增量表文件的大小?
- python - 使用 CLI 与同一环境中的可执行文件从 parquet 读取 DataFrame 时的不同行为
- java - SQLite 不返回表中的所有记录 - SQLite-JDB
- r - 我的数据集中有一列 eventDate (2000-01-01T00:06:00)。如何将它们拆分为日期和时间?
- r - R - 基于重复虚拟变量调整起始变量,带有 lag() - 每行多次测量
- python - Caml Query 在 sharepoint Online 上无法使用 Python
- android - Nativescript 6.5.2 Android apk“解析包时出现问题”
- javascript - *ngFor 带有多个图像标签 - 如何知道所有图像 src 何时加载
- php - 如何使用codeigniter中的会话ID从表中检索数据
- c++ - 如何在 gdb 中检查 C++ 向量中的元素?