不能使用具有委派属性的自定义getter
我是kotlin新手,无法弄清楚这个问题。
我有一个不可空的财产,可能会或可能不会使用。 因此,我已经委派了一个懒惰的方式,以便在需要时进行初始化。
private val labelAnimator: ObjectAnimator by lazy { ObjectAnimator.ofFloat(this, "floatingLabelFraction", 0f, 1f) }
但是,我也需要在每次访问时设置该对象的某些属性。
fun getLabelAnimator(): ObjectAnimator { labelAnimator.duration = (if (isFloatingLabelAnimating) 300 else 0).toLong() return labelAnimator }
但是我不能使用自定义的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 }
这为您提供了Java中的getLabelAnimator()
方法,并直接在Kotlin中访问属性。
但是就像之前几次提到的那样,这可能不是实施这种行为的最好方式。 一个简单的工厂可以做很少的开销同样。
我不是Kotlin的专家,但对我来说听起来不对。 通过委托懒惰你想要初始化对象的第一个getter调用。 然后,你正在写自定义的getter。 我看到那里有冲突。
也许:
private val labelAnimator: ObjectAnimator by lazy { val labelAnimator = ObjectAnimator.ofFloat(this, "floatingLabelFraction", 0f, 1f) labelAnimator.duration = (if (isFloatingLabelAnimating) 300 else 0).toLong() labelAnimator }