Kotlin:为什么编译器需要`const`修饰符?

Lio*_*-On 6 kotlin

在Kotlin有:

  • val - readonly财产
  • const val - 编译时常量

文档:

编译时常数

在编译时已知的值的属性可以使用const修饰符标记为编译时常量.这些属性需要满足以下要求:

  • 顶级或对象的成员
  • 使用String类型或基本类型初始化
  • 没有自定义的吸气剂

鉴于kotlin编译器确实知道识别初始化值(例如,不需要在初始化程序中定义变量类型):

  • 为什么编译器需要程序员的帮助?
  • 它不能识别"在编译时已知其值的属性"和"添加" const修饰符本身吗?

vod*_*dan 10

const修正严重改变性质的合同.

例如,如果您有常规属性,则可以向其添加特殊的getter,而不会影响使用它的代码.

另一方面,您必须重新编译用户代码才能删除const和添加getter.换句话说,你失去了在一个领域拥有一个财产的优势.