Android Studio对密封类when语句分支提示不一致的原因?
密封类when语句提示差异的原因
出现这种差异主要有以下几个核心原因:
Kotlin版本差异
Kotlin 1.5及以上版本支持密封类的子类分布在同一模块的不同文件中,IDE能正确扫描到所有子类,从而提示添加剩余分支实现穷举。而1.5之前的版本要求密封类子类必须和密封类在同一个文件中,若子类不在同一文件,IDE无法识别所有可能的类型,只能提示添加else分支。密封类子类的存放位置
即使Kotlin版本满足要求,如果密封类的子类分散在不同模块,或者在同一模块但IDE未正确索引到这些子类文件,也会导致IDE无法识别全部类型分支,进而只提示else分支。Android Studio检查配置不同
两个项目的Inspections设置存在差异:- 打开
Settings > Editor > Inspections > Kotlin > Control flow issues,查看Exhaustive when statements for sealed classes选项是否开启。 - 若一个项目开启了该检查,另一个未开启,就会出现不同的提示逻辑。
- 打开
编译配置差异
项目的build.gradle中Kotlin编译参数不同,比如是否添加了-Xexhaustive-when强制开启穷举检查。如果一个项目配置了该参数,IDE会严格检查密封类的when分支穷举;未配置的项目则可能只提示默认的else分支。
内容的提问来源于stack exchange,提问作者Moti Bartov
相关产品推荐
相关产品推荐

