在Kotlin,我们可以选择:
class|object X {
[override] val y = Z
}
Run Code Online (Sandbox Code Playgroud)
和
class|object X {
[override] val y: Y
get() = Z
}
Run Code Online (Sandbox Code Playgroud)
应该选择哪一个?何时选择?
根据您希望评估发生的时间来决定.属性初始化器导致memoization语义:初始化表达式仅在实例化时评估:
class X {
val y = Z // Z evaluated only at instantiation time
}
Run Code Online (Sandbox Code Playgroud)
每次访问属性时都会评估属性getter:
class X {
val y get() = Z // evaluated on every access of y
}
Run Code Online (Sandbox Code Playgroud)
有几个因素可能会让您更喜欢其中一个:
Z随时间的变化,您可能希望每次都进行评估.Z总是产生相同的结果,您也可能希望推迟评估,直到第一次访问.在这种情况下,您可以使用lazy属性委托.| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |