В Kotlin список, созданный с использованием функции listOf()
(которая должна быть неизменной) проходит проверку типа для MutableList
с использованием оператора is
.
Пример:
fun main(args: Array<String>) {
val list = listOf("I'm immutable")
println(list is MutableList)
}
напечатает
true
Интересно, что пустой список, созданный с помощью listOf<String>()
, не пройдет проверкуи выведите false , поскольку он возвращает одноэлементный объект EmptyList
.
. После некоторого копания получается, что mutableListOf()
создает java.util.ArrayList
, в то время как listOf()
заканчивается созданием java.util.Arrays$ArrayList
, но ни один из участвующих классов не реализует MutableList
, так почему непустой список все еще проходит проверку типа?Следовательно, существует ли альтернативный способ надежной проверки, является ли список изменчивым, без необходимости проверки на предмет его реальной реализации (is ArrayList
и т. Д.)?