不能使用具有委派属性的自定义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 }