使用具有另一个相似类的参数的辅助构造函数创建数据类实例

时间:2019-10-06 09:54:46

标签: kotlin constructor

我有一个数据类:

data class Person (
    val login: String,
    val password: String
)

有时我需要使用自定义数据实例化它,但有时我需要通过另一个类实例来初始化我的用户:

val authPerson = api.getAuthPerson()  // AuthPerson class has the same fields
val user = User(authPerson)

我写了第二个构造函数,但是不起作用:

data class User (
    val login: String,
    val password: String
) {
    constructor(authPerson: AuthPerson) {
        login = authPerson.login;
        password = authPerson.password
    }
}

有人可以告诉我正确的决定吗?

2 个答案:

答案 0 :(得分:4)

或者如果您不想使用工厂,则可以执行以下操作:

data class User (
    val login: String,
    val password: String
) {
    constructor(anotherUser: User): this(anotherUser.login, anotherUser.password)
}

二级构造函数 must call their primary constructor

答案 1 :(得分:2)

您可以创建工厂方法:

data class User(
    val login: String,
    val password: String
) {
    companion object {
        fun fromPerson(person: Person) = User(person.login, person.password)
    }
}
...
val user = User.fromPerson(person)

或创建扩展功能:

fun Person.toUser() = User(login, password)
...
val user = person.toUser()