2015-04-20 22 views
21

Sto utilizzando Array(0, {i -> ""}) attualmente, e mi piacerebbe sapere se c'è un'implementazione meglio come Array()Come creare una matrice vuota in kotlin?

più, se sto usando arrayOfNulls<String>(0) as Array<String>, il compilatore mi avvisa che questo cast non potrà mai avere successo. Ma è l'implementazione predefinita all'interno di Array(0, {i -> ""}). Mi manca qualcosa?

+0

http://stackoverflow.com/questions/33583235/how- posso-i-dire-Kotlin-che-un-arr ay-or-collection-can not-contain-nulls - uno dei commenti suggerisce che l'avviso è un bug –

risposta

27

Come di recente (giugno 2015) v'è la funzione di libreria standard Kotlin

public fun <T> arrayOf(vararg t: T): Array<T> 

Quindi per creare una matrice vuota di stringhe è possibile scrivere

val emptyStringArray = arrayOf<String>() 
+0

E riguardo gli array digitati come 'IntArray'? In questo momento sto usando 'arrayOf () .toIntArray()', c'è un modo migliore? – csharpfolk

+1

qual è lo scopo di questi metodi? perché non possiamo assegnare la dimensione in modo che non possiamo assegnare il valore o ottenere. array [0] throw 'java.lang.ArrayIndexOutOfBoundsException:' exception. – UnKnown

+0

cosa succede se il tipo è 'T' invece di' String'? – KeepMove

1

ho trovato due modi per creare un array vuoto, il secondo modo senza lambda:

var arr = Array (0, { i -> "" }) 
var arr2 = array<String>() 

Riguardo stringhe nulle di Kotlin, questo non è consentito. Devi usare la stringa ? Tipo per consentire alle stringhe di essere nulle.

17

Solo per riferimento, v'è anche emptyArray. Ad esempio,

var arr = emptyArray<String>() 

Vedi

+0

arr [0] throw 'java.lang.ArrayIndexOutOfBoundsException:' come possiamo usarlo? – UnKnown

+3

È un array vuoto, non è possibile aggiungere/leggere nulla a/da esso. Può sembrare inutile, ma a volte devi passare un array da qualche parte e questo ti permette di costruire facilmente un array vuoto. –

+1

questo è migliore della risposta di Martian Odyssey perché quando viene utilizzato in una classe di dati per inizializzare un array, arrayOf causa una java.util.concurrent.ExecutionException mentre emptyArray() no. – iSWORD

2

array null

var arrayString=Array<String?>(5){null} 
var nullArray= arrayOfNulls<String>(5) 
+0

Questo è un array di null, non stringhe vuote come nella domanda. –

Problemi correlati