【发布时间】:2018-10-25 14:21:21
【问题描述】:
最近 IntelliJ 建议将 final 添加到 val 属性之一。此特定属性在 init {} 块中初始化。我试图找出 final val 构造的语义是什么以及何时应该使用它,但 Kotlin 完全是关于不变性以及 val 如何等同于 Java 中的 final ,所以结果是如此嘈杂,以至于我找不到任何东西。
例子:
final val id: Int // `final` suggested by IDE
init { id = 1 }
相似属性的含义和可能的用法是什么?通过应用final,除了已知的不变性之外,它意味着什么限制?它与继承或外部访问有什么关系吗?
如果属性是 private,IntelliJ 停止建议 final。
【问题讨论】:
-
当认为
val等同于Javafinal时要小心。val可以使用自定义 getter 实现并返回它想要的任何内容。class X { var mutable = 1; val immutableOrSoItSeems get() = mutable }
标签: kotlin immutability