我的Kotlin对象中有两个构造函数,一个是主要的,一个是辅助的。主要内容中没有任何内容,辅助内容需要一些参数。我想在辅助构造函数中映射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
}
}
}
答案 0 :(得分:1)
有些事情看起来有点不对劲。你是在没有参数的情况下调用你的主要构造函数的“this”,而不是在辅助函数中设置传入的值;因为它们没有在构造函数中声明为val
或var
,所以在构造函数完成后它们不会停留。
这里更好的方法是使用一个构造函数在构造函数中声明所有val / vars而不是类体,并提供默认初始化值。这样,您可以使用命名参数进行构造,在这种情况下无需多个。
例如:
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()