Kotlin 编译器可以要求非空断言吗?
Can the Kotlin Compiler Require non-null assertion?
Kotlin 编译器可以要求非空断言吗?
例如。我从 JOOQ 得到一个查询结果,相关类型是 Record!
。但是编译器允许我访问成员而不检查空值。
val orderResult = RowanDatabaseConnector.runInContext(DatabaseContext.BOOKSTORE) {
it.select(SPREE_ORDERS.asterisk())
.from(SPREE_ORDERS)
.where(SPREE_ORDERS.ID.eq(orderId.toInt()))
.fetchOne()
}
return Cart(
user = currentUser,
subTotal = orderResult.get(SPREE_ORDERS.ITEM_TOTAL).toFloat(),
taxTotal = orderResult.get(SPREE_ORDERS.ADDITIONAL_TAX_TOTAL).toFloat(),
total = orderResult.get(SPREE_ORDERS.TOTAL).toFloat(),
lineItems = listOf()
)
是否有类似于 Typescript 的 strictNullCheck
的内容要求我断言 orderResult
不为空?
对于平台类型(以!
结尾的任何类型),您可以使用显式类型规范来声明它是否应该为空。
如果你想明确表示 orderResult
可能为空,那么你可以这样写:
val orderResult: Record? = /* trimmed */
相反,如果您想明确表示 orderResult
不可能为空,那么您可以这样写:
val orderResult: Record = /* trimmed *
通过选择这两个选项之一,类型将为 Record?
或 Record
而不是 Record!
。因此,您将从 Kotlin 获得您习惯的 null 安全性。
Kotlin 编译器可以要求非空断言吗?
例如。我从 JOOQ 得到一个查询结果,相关类型是 Record!
。但是编译器允许我访问成员而不检查空值。
val orderResult = RowanDatabaseConnector.runInContext(DatabaseContext.BOOKSTORE) {
it.select(SPREE_ORDERS.asterisk())
.from(SPREE_ORDERS)
.where(SPREE_ORDERS.ID.eq(orderId.toInt()))
.fetchOne()
}
return Cart(
user = currentUser,
subTotal = orderResult.get(SPREE_ORDERS.ITEM_TOTAL).toFloat(),
taxTotal = orderResult.get(SPREE_ORDERS.ADDITIONAL_TAX_TOTAL).toFloat(),
total = orderResult.get(SPREE_ORDERS.TOTAL).toFloat(),
lineItems = listOf()
)
是否有类似于 Typescript 的 strictNullCheck
的内容要求我断言 orderResult
不为空?
对于平台类型(以!
结尾的任何类型),您可以使用显式类型规范来声明它是否应该为空。
如果你想明确表示 orderResult
可能为空,那么你可以这样写:
val orderResult: Record? = /* trimmed */
相反,如果您想明确表示 orderResult
不可能为空,那么您可以这样写:
val orderResult: Record = /* trimmed *
通过选择这两个选项之一,类型将为 Record?
或 Record
而不是 Record!
。因此,您将从 Kotlin 获得您习惯的 null 安全性。