Kotlin的单个感叹号

Kotlin中的单个感叹号是什么意思? 我已经看过几次,特别是在使用Java API的时候。 但是我无法在文档或StackOverflow中find它。

他们被称为平台types ,它们意味着Kotlin不知道这个值是否可以为null ,由您决定是否可以为空。

简而言之,问题在于任何来自Java的引用都可能为空,并且Kotlin在设计时是无效的,这迫使用户对每个Java值进行空值检查,或者使用安全调用( ?. )或非空值断言( !! )。 那些在纯Kotlin世界中非常方便的function,在Kotlin / Java环境中经常使用它们往往会变成一场灾难。

这就是为什么我们采取了一个激进的方法,并且在谈到Java interop时,让Kotlin的types系统更加轻松:现在来自Java的引用有特别标记的types – Kotlin Blog

这是平台types的符号:

T! 意思是“ TT?

一个types与! 被称为平台types ,这是一种来自Java的types,因此最可能是null 。 这是Kotlin编译器在调用Java时默认推断的内容(对于最基本的情况,可以注释 Java方法来解决这个问题)。 您应该将平台types处理为可空types,除非您确实知道特定的API永远不会返回null 。 编译器允许将平台types分配给可为空和非空types的variables。

平台types的表示法

[…]

T! 意思是“ T or T? ”[…]

您可以将平台types称为“ 未知可空性的types”。 另外重要的是要知道,你不能使用感叹号标记types为你自己的types,它不是Kotlin语法的一部分,它只是一个符号。