На этом шаге мы перечислим типы массивов, которые совместимы с 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 перечислены типы массивов и функции, их создающие.
Тип массива | Создающая функция |
---|---|
IntArray | intArrayOf() |
DoubleArray | doubleArrayOf() |
LongArray | longArrayOf() |
ShortArray | shortArrayOf() |
ByteArray | byteArrayOf() |
FloatArray | floatArrayOf() |
BooleanArray | booleanArrayOf() |
Array(1) | arrayOf() |
(1)Тип Array компилируется в элементарный массив, способный хранить элементы любого ссылочного типа |
Общее правило такое: придерживайтесь типов коллекций, таких как List, если у вас нет веских причин поступать иначе, например, чтобы обеспечить совместимость с Java-кодом. Коллекции Kotlin - в большинстве случаев хороший выбор, потому что поддерживают возможность ограничить доступ только для чтения и обладают широкими возможностями.
На следующем шаге мы рассмотрим понятия "только для чтения" и "неизменяемый".