Создание экземпляра класса данных с использованием вторичного конструктора с параметром, который является другим аналогичным классом - PullRequest
1 голос
/ 06 октября 2019

У меня есть класс данных:

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 ]

4 голосов
/ 06 октября 2019

Или, если вы не хотите использовать фабрику, вы можете сделать:

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

Вторичные конструкторы должны вызвать их основной конструктор .

2 голосов
/ 06 октября 2019

Вы можете создать фабричный метод:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...