【问题标题】:Override a val in data class覆盖数据类中的 val
【发布时间】:2019-12-08 20:07:31
【问题描述】:

我在尝试这段代码时遇到 java.lang.StackOverflowError: stack size 8MB 错误,应用程序崩溃了 1 次,现在它不会再次崩溃,我想知道这是否会导致在提交此代码之前将来有任何问题

以下是本部分使用的接口/数据类的示例

interface y{
    val image
}

data class x(val anotherImage): y{
    override val image
        get() = image ?: anotherImage
}

我在这里想要的是让 val 图像包含图像的 URL,有时后端在 image 中返回它,有时在 anotherImage 中返回它,这就是我写那段代码的原因,在这里使用接口是针对与这个问题无关的另一个问题

【问题讨论】:

    标签: android oop kotlin properties data-class


    【解决方案1】:

    您正在使用自定义 getter 中的实际属性名称递归访问该属性。 Kotlin 提供了 field 标识符,它应该用于在其访问器中引用属性的值:

    val image
        get() = field ?: anotherImage
    
    

    【讨论】:

    • 我尝试使用字段标识符,但那时我收到一个错误,提示必须初始化属性
    • @MahmoudOmara 好吧,根据断章取义的例子,很难猜出你想要实现什么,但我假设你想在后面的某个地方初始化可以为空的 image 属性代码。也许您应该将val image 声明更改为var image,然后使用null 初始化x 类中的属性:override var image: ImageType? = null
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多