知识卡片
when表达式的穷尽性检查
内容
Kotlin的when作为表达式使用时必须穷尽所有可能分支,除非编译器能自行证明所有情况都已覆盖,否则强制要求写else分支兜底;作为语句使用时则没有这个限制,可以忽略未覆盖的分支。这一约束把”有没有考虑周全”从人工审查转移成了编译器强制项。个人理解:这条规则单独看只是语法限制,真正威力要配合能被穷举的封闭类型(如枚举或[[密封类作为受限类型层级]])才能显现——分支覆盖了全部可能取值时,编译器能自动免除else,从而让新增取值时遗漏分支变成编译错误而不是运行时的隐性bug。
参考来源
《Kotlin开发快速入门与实战》第2章《Kotlin编程基础》