Kotlin中Nothing类型推理疑问:省略返回类型为何识别为Unit
问题解答
核心原因是Kotlin的类型推导规则限制:当函数体只有一个
throw表达式时,虽然throw本身是Nothing类型,但如果省略函数返回类型,编译器会优先按照「无返回值函数」的默认规则推导为Unit——这是因为Nothing属于特殊的「底部类型」,编译器不会主动为省略返回类型的函数推导该类型,只会默认将无正常返回路径的函数归为Unit返回。解决方法很直接:必须显式声明返回类型为
Nothing,不能省略。只有显式声明,编译器才会明确识别这个函数的语义是「永远抛出异常,不会返回任何值」,而非默认的无返回值(Unit)。
对比示例:
// 编译器推导为Unit,不符合预期 fun fail(message: String) { throw IllegalArgumentException(message) } // 正确声明,明确返回Nothing fun fail(message: String): Nothing { throw IllegalArgumentException(message) }
内容的提问来源于stack exchange,提问作者Alan Omar
相关产品推荐
相关产品推荐

