Pra*_*arg 3 getter properties kotlin delegated-properties
我是 kotlin 新手,无法弄清楚这个问题。
我有一个不可为 null 的属性,可能会也可能不会使用。因此,我以一种惰性的方式委托它,以便在需要时对其进行初始化。
private val labelAnimator: ObjectAnimator by lazy {
ObjectAnimator.ofFloat(this, "floatingLabelFraction", 0f, 1f)
}
Run Code Online (Sandbox Code Playgroud)
但是,我还需要在每次访问该对象时设置该对象的一些属性。
fun getLabelAnimator(): ObjectAnimator {
labelAnimator.duration = (if (isFloatingLabelAnimating) 300 else 0).toLong()
return labelAnimator
}
Run Code Online (Sandbox Code Playgroud)
但我无法使用自定义 getter,因为该属性是委托的。我如何以最好的方式实现这一目标?
例如,您可以使用原始属性作为支持属性,并实际将该属性定义为对其的委托。
private val _labelAnimator by lazy {
ObjectAnimator.ofFloat(this, "floatingLabelFraction", 0f, 1f)
}
val labelAnimator: ObjectAnimator
get() {
_labelAnimator.duration = if (isFloatingLabelAnimating) 300L else 0L
return _labelAnimator
}
Run Code Online (Sandbox Code Playgroud)
这为您提供了JavagetLabelAnimator()
中的方法和Kotlin中的直接属性访问。
但就像之前多次说过的那样,这可能不是实现这种行为的最佳方式。一个简单的工厂只需很少的开销就可以做同样的事情。
归档时间: |
|
查看次数: |
1994 次 |
最近记录: |