gpt4 book ai didi

kotlin - 在 Kotlin 中,在属性初始化器和属性 getter 之间进行选择的最佳实践是什么?

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

在 Kotlin 中,我们可以选择:

class|object X {
[override] val y = Z
}

class|object X {
[override] val y: Y
get() = Z
}

应该选择哪个,什么时候选择?

最佳答案

根据您希望评估发生的时间来决定。属性初始化器导致内存语义:初始化表达式仅在实例化时计算:

class X {
val y = Z // Z evaluated only at instantiation time
}

每次访问属性时都会评估属性 getter :

class X { 
val y get() = Z // evaluated on every access of y
}

有几个因素可能会让您更喜欢其中之一:

  • 如果 Z 的评估随时间变化,您可能希望每次都评估它。
  • 即使 Z 总是产生相同的结果,您也可能希望将评估推迟到第一次访问时。在这种情况下,您可以使用 lazy 属性委托(delegate)。
  • 可能结果的大小很大,您不希望在不主动使用时将其保留在内存中。在这种情况下,更喜欢自定义 getter。

关于kotlin - 在 Kotlin 中,在属性初始化器和属性 getter 之间进行选择的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50479700/

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