Может ли компилятор Kotlin требовать ненулевое утверждение? - PullRequest
1 голос
/ 09 июля 2019

Может ли компилятор Kotlin требовать ненулевые утверждения?

например. Я получаю результат запроса от JOOQ, и тип relting 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()
)        

Есть ли что-то похожее на strictNullCheck Typescript, которое потребовало бы, чтобы я утверждал, что orderResult не равно нулю?

1 Ответ

2 голосов
/ 09 июля 2019

Для типов платформы (любой тип, заканчивающийся !), вы можете использовать явную спецификацию типа, чтобы объявить, может ли она быть обнуляемой или нет.

Если вы хотитечтобы объяснить, что orderResult может быть нулевым, вы можете написать это так:

val orderResult: Record? = /* trimmed */

И наоборот, если вы хотите сделать явным, что orderResult не может быть нулевым, тогдаВы можете написать:

val orderResult: Record = /* trimmed *

Выбрав один из этих двух вариантов, тип будет Record? или Record вместо Record!.И, как таковой, вы получите нулевую безопасность, к которой вы привыкли, от Kotlin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...