Итак, проблема в том, что компилятор недостаточно умен, или ... мы не предоставляем достаточно информации.
В вашем случае проблемный вызов, когда вы гарантируете, что firstName
и gender
не ноль:
if (listOf(matchUid, firstName, gender, matchBio, age).any { it == null }) return goOffline()
Если вы измените его на простую цепочку нулей, он будет работать правильно:
if (matchUid == null || firstName == null || gender == null || matchBio == null || age == null) return goOffline()
Итак, почему это так? Компилятор просто не знает, что listOf(vararg objects: Any?).any { it == null }
означает, что ни один из этих объектов не является нулевым. Итак, что мы можем сделать?
Kotlin 1.3 дал нам прекрасную возможность написать contracts
, который является подсказкой для компилятора, который, например, если f(x)
возвращает true
означает, что x
ненулевой. Но, к сожалению, контракты не поддерживают аргумент varargs (или я не нашел способ сделать это).
Итак, в вашем случае вы можете заменить ваш вызов цепочкой одиночной проверки нуля.