知识卡片
智能转换的编译期保证
内容
Kotlin编译器会跟踪不可变值的类型判断(如用is检查过类型的val),在后续使用中自动完成安全转换,无须手动强转,这被称为智能转换。但它对var局部变量、open修饰的属性、自定义getter的val一律失效,因为编译器无法证明这些值在检查之后到实际使用之间不会被并发修改或子类覆盖改写。个人理解:智能转换本质是用”编译器能否证明值不变”作为开关,把类型安全的便利精确限定在可证明安全的范围内,而不是全面放开。
参考来源
《Kotlin开发快速入门与实战》第2章《Kotlin编程基础》