Какая польза от emptyArray () в Котлине

училась emptyArray() в Котлине, но я не могу назначить значения в нем (что очевидно), и ни я не могу установить его размер. Какая польза от emptyArray в Котлин?

4 ответов


функция emptyArray () возвращает пустой массив размером 0. он не принимает никаких параметров (ни размера, ни элементов). вы можете использовать его как rvalue в операциях назначения. Вы можете использовать пустой массив для сброса всех значений в ранее существовавших массивах и установить его размер в 0. Примечание: лучше вернуть пустой, чем возвращать массив нулей, так как он не создаст никаких исключений нулевой точки в дальнейших операциях.

var array=arrayOf(1,2,3,4,5);
array = emptyArray() //The array datais dumped and size is set to 0;
array = arrayOf(0,1,2)

аналогично java.util.Collections.emptyList() методы и их аналоги для Maps, etc., эти методы удобны при вызове метода, который принимает массив / коллекцию в качестве аргумента, но вы не хотите/должны предоставлять какие-либо элементы в этой коллекции. Можно создать экземпляр нового пустого массива / коллекции или использовать один из вспомогательных методов.

если приведенный выше вариант использования очень распространен в вашем сценарии, вы сохраняете память, используя помощники, как всегда, один и тот же экземпляр повторно используется вместо того, чтобы создавать новые экземпляры снова и снова. В противном случае это в основном "синтаксические конфеты", что делает ваш код более читаемым и понятным.


есть случаи, когда вы хотите вернуться к пустому массиву или пустому списку. Например:

return someInputArray?.filterNotNull() ?: emptyArray()

в этом случае, если у меня есть допустимый входной массив, я отфильтровываю null значения, в противном случае, если исходный массив был null Я возвращаю пустой массив. Поэтому массив всегда возвращается вместо null. Пустые списки и массивы, вероятно, более распространены, чем передача нулевых списков или массивов в Котлине.

так что да, он пуст, и вы не можете добавить к это так же, как ни один массив JVM не расширяется после выделения.


массивы-это контейнеры фиксированного размера. The emptyArray() функция создает массив длиной 0, и вы действительно не можете много сделать с этим. Вы не можете ничего хранить в нем, и вы не можете изменить его размер.

общий случай использования, когда вам нужен пустой массив, будет значением по умолчанию для свойства, которое будет установлено в другой массив позже. Это может быть лучше, чем хранить null в этом свойстве по умолчанию, потому что вам не нужно иметь дело с обработкой возможного null значение, когда код использует массив. Например, вы можете безопасно перебирать пустой массив.


простой пример:

class NumberHolder {

    var numbers: Array<Int> = emptyArray()

    fun printNumbers() {
        numbers.forEach { println(it) }
    }

}

использование этого класса будет выглядеть примерно так:

val nh = NumberHolder()
nh.printNumbers() // prints nothing
nh.numbers = arrayOf(1, 2, 3)
nh.printNumbers() // prints 1, 2, and 3 on separate lines