android - 如何在 Kotlin Android 中为数据类创建空构造函数

我在 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 个选项:

  1. 为每个 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>()
    ) 
    
  2. 声明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 类的 copyequals 或者不使用自动生成的 数据类 方法你可以像这样使用常规类:

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 应用程序

Gitlab - 创建分支后运行脚本

security - asp.net core 身份 cookie 重放攻击

angular - 不能在属性选择器中使用 mat-tab

javascript - 调整大小并使 PotlyJS 的 fiddle 图表响应

python - 使用 PyTorch 分布式 NCCL 连接失败

javascript - 本地加载keras模型到tensorflow.js