Знаки вопроса, чтобы сказать, что что-то обнуляемое, идут на типы, а не на имена переменных.Вы также использовали is null
, что неправильно, поскольку null
- это значение, а не тип.Вот ваш код с изменениями, внесенными для его компиляции и запуска:
fun describe(obj: Any?): String =
when(obj) {
1 -> "one"
"hello" -> "greeting"
is Long -> "long"
!is String -> "not String"
null -> "null"
else -> "unknown"
}
fun main() {
println(describe(1))
println(describe("Hello"))
println(describe(1000L))
println(describe(2))
println(describe(null))
println(describe("other"))
}
Результат:
one
unknown
long
not String
not String
unknown
Похоже, вы хотите переместить свой чек на null
выше, чтобы ваши тесты сделалиэто так далеко для null
значения.Таким образом, null
не является строкой, поэтому вы получаете «не String» для значения null
.