Kotlin编译器可以要求非null断言吗?
例如。我从JOOQ获取查询结果,相关类型为print("Your new ID Number is: " + str(ID))
。但是编译器允许我访问成员而无需检查null。
if
是否有与Typescript的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()
)
不为空?
答案 0 :(得分:2)
对于平台类型(以!
结尾的任何类型),您可以使用显式类型规范来声明它是否应该为空。
如果您想使orderResult
可能为空,则可以这样写:
val orderResult: Record? = /* trimmed */
相反,如果您想明确指出orderResult
不能为null,则可以编写:
val orderResult: Record = /* trimmed *
通过选择这两个选项之一,类型将为Record?
或Record
而不是Record!
。这样,您将获得Kotlin惯用的null安全性。