Шаг 123.
Основы Kotlin.
Списки и множества. Типы массивов

    На этом шаге мы перечислим типы массивов, которые совместимы с Java.

    Если вы работали с Java, то знаете, что он поддерживает массивы примитивных типов, отличающиеся от ссылочных типов, таких как List и Set, с которыми вы работали в предыдущих шагах. Kotlin также включает несколько ссылочных типов с именами, включающими слово Array, которые компилируются в элементарные массивы Java. Типы Array используются главным образом для взаимодействий между кодом на Java и Kotlin.

    Допустим, есть Java-метод, который вы хотите вызвать из Kotlin, и выглядит он так:

static void displayPlayerAges(int[] playerAges) { 
  for(int i = 0; i < ages.length; i++) {
    System.out.println("age: " + ages[i]);
  }
}

    Функция displayPlayerAges() принимает параметр int[] playerAges, массив значений примитивного типа int. Вот как можно вызвать метод displayPlayerAges() из Kotlin:

  val playerAges: IntArray = intArrayOf(34, 27, 14, 52, 101) 
  displayPlayerAges(playerAges)

    Обратите внимание на объявление типа IntArray и вызов функции intArrayOf(). Так же как List, тип IntArray представляет последовательность элементов, а именно целых чисел. В отличие от List, IntArray преобразуется в элементарный массив при компиляции. После компиляции получившийся байт-код будет точно совпадать с ожидаемым примитивным массивом int, необходимым для вызова Java-функции displayPlayerAges().

    Преобразовать коллекцию Kotlin в соответствующий элементарный Java-массив можно с помощью встроенных функций. Например, список целых чисел можно преобразовать в IntArray, используя функцию toIntArray(), поддерживаемую типом List. Это позволит вам преобразовать коллекцию в массив int, когда понадобится передать элементарный массив в Java-функцию:

val playerAges: List<Int> = listOf(34, 27, 14, 52, 101) 
displayPlayerAges(playerAges.toIntArray())

    В таблице 1 перечислены типы массивов и функции, их создающие.

Таблица 1. Типы массивов
Тип массива Создающая функция
IntArray intArrayOf()
DoubleArray doubleArrayOf()
LongArray longArrayOf()
ShortArray shortArrayOf()
ByteArray byteArrayOf()
FloatArray floatArrayOf()
BooleanArray booleanArrayOf()
Array(1) arrayOf()
(1)Тип Array компилируется в элементарный массив, способный хранить элементы любого ссылочного типа

    Общее правило такое: придерживайтесь типов коллекций, таких как List, если у вас нет веских причин поступать иначе, например, чтобы обеспечить совместимость с Java-кодом. Коллекции Kotlin - в большинстве случаев хороший выбор, потому что поддерживают возможность ограничить доступ только для чтения и обладают широкими возможностями.

    На следующем шаге мы рассмотрим понятия "только для чтения" и "неизменяемый".




Предыдущий шаг Содержание Следующий шаг