android - Kotlin 错误 - 委托(delegate)调用链中有一个循环

标签 android kotlin constructor

我有一个 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/

相关文章:

java - 小部件点击无响应

java - Android kitkat API 19,Intent.ACTION_VIEW 不起作用

java - 从 Java 转换为 Kotlin OnClickListener

java - 使用静态工厂样式构造函数将元素添加到一个或多个静态列表

c++ - Java程序员——C++人如何使用类?指向类的指针,默认参数?

java - 我想在 Android Activity 中制作一个可滚动的带有图像的文本列表。我应该用什么?

android - FragmentActivity onCreateView

android - 类型不匹配推断类型为 () -> Unit 但应为 FlowCollector<Int>

java - 隔离注解的实例化

java - 能够创建带有 protected 构造函数的 var 吗?