На этом шаге мы перечислим типы массивов, которые совместимы с 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 - в большинстве случаев хороший выбор, потому что поддерживают возможность ограничить доступ только для чтения и обладают широкими возможностями.
На следующем шаге мы рассмотрим понятия "только для чтения" и "неизменяемый".