listOf () возвращает MutableList - PullRequest
       2

listOf () возвращает MutableList

0 голосов
/ 30 сентября 2018

В 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 и т. Д.)?

1 Ответ

0 голосов
/ 01 октября 2018

Разделение между List и MutableList - иллюзия, созданная компилятором Kotlin.Во время выполнения Kotlin использует классы коллекции Java, которые имеют только один интерфейс List, содержащий методы чтения и мутации.Ссылки на время компиляции на List и MutableList обе скомпилированы на java.util.List ссылки.Поэтому невозможно определить, является ли список MutableList во время выполнения.

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