我有一个 Kotlin 数据类,它采用以下参数并且可打包。我在这个数据类中定义了一个辅助构造函数,带有两个附加参数 lastSeen 和 netTotal。但是,我不断收到错误 委托(delegate)调用链中有一个循环 用于辅助构造函数。我该如何解决这个问题?
@Parcelize
data class Person(
val email: Email,
val overrideEmail: Email,
val phone: String,
val firstName: String,
val overrideFirstName: String,
val lastName: String,
val overrideLastName: String,
val personId: String
) : Parcelable {
//some code
constructor(
email: Email,
overrideEmail: Email,
phone: String,
firstName: String,
overrideFirstName: String,
lastName: String,
overrideLastName: String,
personId: String,
lastSeen: String,
netTotal: Int?
) : this(email, overrideEmail, phone, firstName, overrideFirstName, lastName, overrideLastName, personId, lastSeen, netTotal)
}
此外,我必须在响应映射器中使用这个辅助构造函数。具有原始值的映射器如下所示。如何在响应映射器中包含辅助构造函数?class PersonFromResponseMapper @Inject constructor() : Mapper<Person, PersonResponse>() {
override fun map(from: PersonResponse, params: Any?): Person = with(from) {
Person(
Email(receiptEmailAddress.orEmpty()),
Email(overrideEmail.orEmpty()),
"",
firstName.orEmpty(),
overrideFirstName.orEmpty(),
lastName.orEmpty(),
overrideLastName.orEmpty(),
personUserId.orEmpty()
)
}
最佳答案
您收到此错误是因为您使用辅助构造函数调用辅助构造函数,从而使其成为一个循环。如果你稍微重构/美化你的代码,那么它变得很明显:
// secondary constructor
constructor(
email: Email,
overrideEmail: Email,
phone: String,
firstName: String,
overrideFirstName: String,
lastName: String,
overrideLastName: String,
personId: String,
lastSeen: String,
netTotal: Int?
) : this(
email,
overrideEmail,
phone,
firstName,
overrideFirstName,
lastName,
overrideLastName,
personId,
lastSeen,
netTotal
)
如果您比较参数,您可以看到您正在调用相同的(辅助)构造函数。您必须调用主构造函数,然后在 block 中使用您的附加参数。如果你解决了这个问题,你也可以在你的映射器中调用你的辅助构造函数,没有任何问题。
关于android - Kotlin 错误 - 委托(delegate)调用链中有一个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63082076/