2017-05-29 6 views
36

Widzę, że Kotlin ma odpowiednio ByteArray, ShortArray, IntArray, CharArray, DoubleArray, FloatArray, które są równoważne byte[], short[], int[],char[], double[], float[] w Javie.Jaki jest ekwiwalent Kotlina dla Java's String []?

Zastanawiam się, czy istnieje odpowiednik StringArray odpowiadający Jowi String[]?

+3

'typealias StringArray = Array ';) – marstran

Odpowiedz

49

Nie ma szczególny przypadek String, ponieważ String jest zwykłym referencyjna typ na JVM, w przeciwieństwie Java primitives (int, double, ...) - przechowywanie ich w odniesieniu Array<T> wymaga boxing them into objects like Integer and Double. Celem wyspecjalizowanych macierzy, takich jak IntArray w Kotlin, jest przechowywanie nieskrytych prymitywów, pozbycie się boksowania i rozpakowywania narzutów (tak samo jak Java int[] zamiast Integer[]).

Można użyć Array<String> (i Array<String?> dla nullables), co stanowi równowartość String[] w Javie:

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

Patrz także: Arrays in the language reference

1

Można użyć arrayOf() funkcję:

val literals = arrayOf("str1", "str2", "str3") 
+0

'arrayof' zwróciło 'Array ', czy 'Array ' jest równe 'String []' w Javie? – chancyWu

+0

Nie, w kotlinach Ciąg nie jest typem pierwotnym. jego Array w kotlin taki sam jak String [] w Javie – chandil03

+0

@chancyWu tak. 'Array ' w Kotlin jest odpowiednikiem 'Cokolwiek []' w Javie i 'IntArray',' LongArray' i tak dalej są odpowiednikami 'int []', 'long []', ... –

6

Te typy są tam tak, że można tworzyć tablice prymitywów, a nie pudełkową typy. Ponieważ String nie jest prymitywny w Javie, możesz po prostu użyć Array<String> w Kotlin jako odpowiednika Javy String[].

3

Dla Strings i innych typów, wystarczy użyć Array<*>. Powód IntArray i inne istnieją, aby zapobiec autoboxing.

Tak int[] dotyczy , gdzie Integer[] dotyczy Array<Int>.