Kotlin主要和次要建设者问题

我在我的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 } } } 

一些事情看起来有点小。 你正在调用你的主要构造函数的“this”没有参数,而不是设置在次要的传入值; 因为它们没有在构造函数中声明为valvar所以它们在构造函数完成后不会停留。

一个更好的方法是使用一个构造函数在构造函数中声明所有的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()