Я столкнулся с особенностью при добавлении нулевого значения в коллекцию ненулевого типа.
Лучше всего это иллюстрируют следующие примеры кода:
val a = LongSparseArray<String>()
a.put(1L, null)
a.toArrayList().filterNotNull()
// bad - no error, but warns that "filterNotNull" is a "Useless call on collection type", when it clearly isn't
val b = LongSparseArray<String?>()
b.put(1L, null)
b.toArrayList().filterNotNull()
// good
val c = HashMap<Long, String>()
c.put(1L, null)
// compilation error - good
val d = HashMap<Long, String?>()
d.put(1L, null)
// good
При использовании некоторых коллекций (SparseArray, LongSparseArray) из String я могу свободно добавлять ноль, и ноль-безопасность Котлина не подхватывает его. При использовании других (HashMap) нулевая безопасность Kotlin предотвращает это, если я не использую String? типа.
Кто-нибудь знает, как я могу убедиться, что значения LongSparseArray не равны NULL?