作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个库,参数的任何更改都会刷新 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/
我是一名优秀的程序员,十分优秀!