Что такое Kotlin эквивалент Java String []?

165

Я вижу, что Kotlin имеет ByteArray, ShortArray, IntArray, CharArray, DoubleArray, FloatArray, что эквивалентно byte[], short[], int[],char[], double[], float[]в Java.

Теперь мне интересно, есть ли StringArrayэквивалент Java String[]?

chancyWu
источник
7
typealias StringArray = Array<String>;)
Марстран

Ответы:

226

Там нет особого случая String, потому что Stringэто обычный ссылочной типа на JVM, в отличии от Java примитивов ( int, double, ...) - хранить их в ссылке Array<T>требует бокса в объекты , как IntegerиDouble . Назначение специализированных массивов, как IntArrayв Kotlin, состоит в том, чтобы хранить неупакованные примитивы, избавляя от накладных расходов на упаковку и распаковку (то же самое, что Java int[]вместо Integer[]).

Вы можете использовать Array<String>Array<String?>для nullables), что эквивалентно String[]в Java:

val stringsOrNulls = arrayOfNulls<String>(10) // returns Array<String?>
val someStrings = Array<String>(5) { "it = $it" }
val otherStrings = arrayOf("a", "b", "c")

Смотрите также: Массивы в справочнике по языку

горячая клавиша
источник
18

использовать arrayOf , arrayOfNulls , emptyArray

var colors_1: Array<String> = arrayOf("green", "red", "blue")
var colors_2: Array<String?> = arrayOfNulls(3)
var colors_3: Array<String> = emptyArray()
Дэн Алботяну
источник
16

Для создания пустого Array of Stringsв Kotlin вы должны использовать один из следующих шести подходов:

Первый подход:

val empty = arrayOf<String>()

Второй подход:

val empty = arrayOf("","","")

Третий подход:

val empty = Array<String?>(3) { null }

Четвертый подход:

val empty = arrayOfNulls<String>(3)

Пятый подход:

val empty = Array<String>(3) { "it = $it" }

Шестой подход:

val empty = Array<String>(0, { _ -> "" })
Энди Федоров
источник
9

Эти типы существуют для того, чтобы вы могли создавать массивы примитивов, а не штучные типы. Поскольку String не является примитивом в Java, вы можете просто использовать его Array<String>в Kotlin как эквивалент Java String[].

zsmb13
источник
5

Для Stringsи других типов, вы просто используете Array<*>. Причина IntArrayи другие существуют, чтобы предотвратить автобокс.

Так int[]относится к тому, IntArrayгде Integer[]относится к Array<Int>.

nhaarman
источник
1

Некоторые из распространенных способов создания массива String:

  1. var arr = Array (5) {""}

Это создаст массив из 5 строк с начальными значениями, которые будут пустой строкой.

  1. var arr = arrayOfNulls <String?>(5)

Это создаст массив размером 5 с начальными значениями, равными нулю. Вы можете использовать данные String для изменения массива.

  1. var arr = arrayOf («ноль», «один», «два», «три»)

Когда вы уже знаете содержимое массива, вы можете напрямую инициализировать массив.

  1. Существует также простой способ создания многомерного массива строк.

    var matrix = Array (5) {Array (6) {""}}

    Таким образом, вы можете создать матрицу из 5 строк и 6 столбцов с начальными значениями пустой строки.

Химаншу Гарг
источник
0

Этот пример отлично работает в Android

В kotlin вы можете использовать лямбда-выражение для этого. Определение конструктора массива Kotlin:

Array(size: Int, init: (Int) -> T)

Который оценивает:

skillsSummaryDetailLinesArray = Array(linesLen) {
        i: Int -> skillsSummaryDetailLines!!.getString(i)
}

Или:

skillsSummaryDetailLinesArray = Array<String>(linesLen) {
        i: Int -> skillsSummaryDetailLines!!.getString(i)
}

В этом примере определение поля было:

private var skillsSummaryDetailLinesArray: Array<String>? = null

Надеюсь это поможет

user2288580
источник
0

Вы также можете использовать:

val frases = arrayOf("texto01","texto02 ","anotherText","and ")

например.

Жоао Артур
источник