Kotlin编译器可以要求非null断言吗?

时间:2019-07-09 18:04:35

标签: kotlin null nullreferenceexception

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() ) 不为空?

1 个答案:

答案 0 :(得分:2)

对于平台类型(以!结尾的任何类型),您可以使用显式类型规范来声明它是否应该为空。

如果您想使orderResult可能为空,则可以这样写:

val orderResult: Record? = /* trimmed */

相反,如果您想明确指出orderResult不能为null,则可以编写:

val orderResult: Record = /* trimmed *

通过选择这两个选项之一,类型将为Record?Record而不是Record!。这样,您将获得Kotlin惯用的null安全性。