Kotlin中类型后的单个感叹号"!"代表什么含义?
Kotlin中
Type!(平台类型)的含义 你看到的View!、Any!这类带感叹号的类型是Kotlin的平台类型,是专门用来兼容Java代码的设计。
为什么会有平台类型?
Java没有严格的可空性声明机制,当Kotlin调用Java代码时,无法确定返回值或参数到底是可空还是非空,于是用Type!这种模糊类型来表示:这个值可能是非空的Type,也可能是可空的Type?。
和Type?的区别
两者完全不同:
Type?是Kotlin明确的可空类型,编译器会强制你处理空安全(比如必须用?.、?:或者空判断);Type!是平台类型,编译器不会强制空检查——你可以直接把它当非空类型调用方法,也可以用空安全操作符处理。但直接当非空用有风险,如果实际值是null,会直接抛出NullPointerException。
实际代码示例
比如你提到的mySpinner.selectedItem,Java中Spinner.getSelectedItem()返回的是Object,Kotlin无法确定它是否会返回null,所以标记为Any!:
val item = mySpinner.selectedItem // 类型为Any! // 直接当非空用(有崩溃风险) val str = item.toString() // 安全的空处理方式 val safeStr = item?.toString() ?: "默认值"
更安全的处理方式
建议主动将平台类型转换为明确的可空或非空类型:
// 转为明确的可空类型 val nullableItem: Any? = mySpinner.selectedItem // 确定不会为null时,转为非空类型(实际为null会抛出NPE) val nonNullItem: Any = mySpinner.selectedItem!!
内容的提问来源于stack exchange,提问作者Amey079
相关产品推荐
相关产品推荐

