gpt4 book ai didi

android - Kotlin 主要和次要构造函数问题

转载 作者:行者123 更新时间:2023-11-30 00:16:32 33 4
gpt4 key购买 nike

我的 Kotlin 对象中有两个构造函数,一个是主构造函数,一个是辅助构造函数。 primary 什么都没有,secondary 有一些参数。我想在辅助构造函数中映射一个 DTO,但我看不出有什么问题。

示例

open class User(): RealmObject() {

@PrimaryKey
open var id: Long = 0

open var login: String? = null

open var firstName: String? = null

open var surname: String? = null

open var isAdmin: Boolean = false

open var groups: RealmList<Int>? = null

constructor(id: Long?, login: String?, firstName: String?, surname: String?, admin: Boolean?, groups: List<Int>?) : this()

companion object {
fun map(dto: UserDTO): User {
Timber.d(dto.toString()) //The response data from the WS, OK with some data
val groups = RealmList<Int>()
dto.groups?.forEach { groups.add(it) }
val u = User(dto.id, dto.login, dto.firstName, dto.surname, dto.admin, groups) //Calling the secondary constructor
Timber.d(u.toString()) // Everything is null or false, KO
return u
}
}
}

最佳答案

有些事情看起来有点不对劲。您在不带参数的情况下调用主构造函数的“this”,也没有在辅助构造函数中设置传入的值;因为它们没有在构造函数中以内联方式声明为 valvar,所以它们不会在构造函数完成后留下来。

一种更好的方法是只使用一个构造函数在构造函数中而不是在类主体中声明所有 val/var,并提供默认初始化值。这样,您可以使用命名参数进行构造,在这种情况下不需要多个参数。

例如:

open class SomeClass(@PrimaryKey
open var id: Long = 0,
open var login: String? = null,
open var firstName: String? = null,
open var surname: String? = null,
open var isAdmin: Boolean = false,
open var groups: RealmList<Int>? = null): RealmObject()

关于android - Kotlin 主要和次要构造函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47162811/

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