我在 Kotlin 数据类中声明了 10 多个变量,我想为它创建一个空的构造函数,就像我们通常在 Java 中做的那样。
数据类:
data class Activity(
var updated_on: String,
var tags: List<String>,
var description: String,
var user_id: List<Int>,
var status_id: Int,
var title: String,
var created_at: String,
var data: HashMap<*, *>,
var id: Int,
var counts: LinkedTreeMap<*, *>,
)
预期用途:
val activity = Activity();
activity.title = "New Computer"
sendToServer(activity)
但是数据类要求在创建构造函数时传递所有参数。我们如何才能像 Java POJO 类构造函数一样简化它?
val activity = Activity(null,null,null,null,null,"New Computer",null,null,null,null)
sendToServer(activity)
最佳答案
这里有 2 个选项:
为每个 primary constructor 分配一个默认值参数:
data class Activity(
var updated_on: String = "",
var tags: List<String> = emptyList(),
var description: String = "",
var user_id: List<Int> = emptyList(),
var status_id: Int = -1,
var title: String = "",
var created_at: String = "",
var data: HashMap<*, *> = hashMapOf<Any, Any>(),
var id: Int = -1,
var counts: LinkedTreeMap<*, *> = LinkedTreeMap<Any, Any>()
)
声明a secondary constructor没有参数:
data class Activity(
var updated_on: String,
var tags: List<String>,
var description: String,
var user_id: List<Int>,
var status_id: Int,
var title: String,
var created_at: String,
var data: HashMap<*, *>,
var id: Int,
var counts: LinkedTreeMap<*, *>
) {
constructor() : this("", emptyList(),
"", emptyList(), -1,
"", "", hashMapOf<Any, Any>(),
-1, LinkedTreeMap<Any, Any>()
)
}
如果您不依赖 Activity
类的 copy
或 equals
或者不使用自动生成的 数据类
方法你可以像这样使用常规类:
class ActivityDto {
var updated_on: String = "",
var tags: List<String> = emptyList(),
var description: String = "",
var user_id: List<Int> = emptyList(),
var status_id: Int = -1,
var title: String = "",
var created_at: String = "",
var data: HashMap<*, *> = hashMapOf<Any, Any>(),
var id: Int = -1,
var counts: LinkedTreeMap<*, *> = LinkedTreeMap<Any, Any>()
}
不是每个 DTO需要是一个数据类
,反之亦然。事实上,根据我的经验,我发现数据类在涉及一些复杂业务逻辑的领域特别有用。
https://stackoverflow.com/questions/61085891/
相关文章:
amazon-web-services - 错误 1045 (28000) : Access den
sql - 如何消除 DB2400 或任何 SQL 中 JSON_ARRAYAGG 中的重复行?
node.js - 如何在 Kotlin-React-App 中导入 Bootstrap 库
node.js - 如何在 heroku 上部署 Node Media Server 应用程序
security - asp.net core 身份 cookie 重放攻击
javascript - 调整大小并使 PotlyJS 的 fiddle 图表响应