我有一个数据类:
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
}
}
有人可以告诉我正确的决定吗?
答案 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()