gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:10:45 24 4
gpt4 key购买 nike

我在 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需要是一个数据类,反之亦然。事实上,根据我的经验,我发现数据类在涉及一些复杂业务逻辑的领域特别有用。

关于android - 如何在 Kotlin Android 中为数据类创建空构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61085891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com