gpt4 book ai didi

kotlin - 如何在不调用 kotlin 的 setter 和 getter 的情况下访问变量

转载 作者:行者123 更新时间:2023-12-02 13:08:56 25 4
gpt4 key购买 nike

我正在开发一个库,参数的任何更改都会刷新 View 。在 refresh() 函数中,我将一些参数的值设置为默认值。

var viewAlpha= 255
set(value) {
field = value
refresh()
}

fun refresh() {
viewAlpha = 255
invalidate()
}

由于明显的原因,这导致了 StackOverflowError。

Caused by: java.lang.StackOverflowError: stack size 8MB

当我们在同一个类中访问它时,是否可以在不调用其 setter 的情况下访问 kotlin 中的变量。与我们在java中所做的类似。

最佳答案

一种方法是为你提供良好的后盾,以摆脱二传-裁判循环:

private var _viewAlpha = 255

var viewAlpha
get() {
return _viewAlpha
}
set(value) {
_viewAlpha = value
refresh()
}

fun refresh() {
_viewAlpha = 255
invalidate()
}

如果您想简化多个字段的逻辑,您可以将此实现抽象为单独的类,并使用带有直接 setter 的回调调用,无需 refresh 调用即可工作。像这样:

class Field(val onSetCb: (Field) -> Unit) {

private var viewAlpha = 255

fun get() {
return viewAlpha
}

fun set(value: Int) {
setDirect(value)
onSetCb(this)
}

fun setDirect(value: Int) {
viewAlpha = value;
}
}

// Elsewhere...

fun refresh(field: Field) {
field.setDirect(255)
invalidate()
}

val f = Field(::refresh)
f.set(255)

关于kotlin - 如何在不调用 kotlin 的 setter 和 getter 的情况下访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52713981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com