Kotlin中调用Java void方法后Unit变量是否保证非空?
问题:Kotlin中调用Java void函数后,Unit?变量是否保证非空?
结论:是的,第3行的unit变量绝对是非空的,它的值就是Kotlin唯一的Unit实例。
具体解释:
- Kotlin和Java交互时,编译器会自动把Java的
void方法适配成返回Unit类型——这是语言层面的默认规则,不管Java方法内部逻辑如何,调用后都会返回Unit.INSTANCE,绝不会返回null。 - 你声明的
unit是Unit?类型,只是允许它存储null,但这里的赋值语句unit = someJavaApi.someJavaVoidFunction(),本质是把Kotlin的Unit实例赋值给它,所以此时变量肯定非空。 - 至于你担心的Java
void和KotlinUnit的差异:Java的void是真正的“无返回值”,但Kotlin没有这个概念,用Unit来表示“无意义的返回值”,这个转换是编译器自动完成的,完全不需要你额外处理,也不会出现null的情况。
你的代码示例
var unit: Unit? = null unit = someJavaApi.someJavaVoidFunction() // java void function // line 3: is unit guaranteed to be non-null here? I don't see why it would not be, but with java void vs kotlin Unit, it makes me a little worried.
内容的提问来源于stack exchange,提问作者detcle
相关产品推荐
相关产品推荐

