为什么var foo = null编译

Dis*_*two 4 kotlin

我从Kotlin开始并试图了解一些事情.

var foo: String = null 不按预期编译.

var foo: String? = null 应该是正确的语法并按预期编译.

那为什么要var foo = null编译?

zsm*_*b13 9

该类型foo在这种情况下会被推断为Nothing?,这是一个非常特殊的类型.简而言之,Nothing是一个类型,它是Kotlin中每个类型的子类型(因此Nothing?是每个可空类型的子类型),没有实例,并且可以用作永不返回的函数的返回类型.

尽管Nothing可以没有实例,但null它本身就是类型Nothing?,这就是为什么它可以分配给任何可以为null的变量.

您可以了解更多深约Nothing官方的文档,在这个优秀的文章中,在这篇文章中,涵盖整个科特林类型层次.


nha*_*man 5

因为var foo = null,推断出类型Nothing?,因此是有效的语法.

  • 即你只能在该变量中存储null. (2认同)