2015-03-22 11 views
7

Ho il seguente codice:Kotlin: il ciclo For deve avere un metodo iteratore - si tratta di un bug?

public fun findSomeLikeThis(): ArrayList<T>? { 
    val result = Db4o.objectContainer()!!.queryByExample<T>(this as T) as Collection<T> 
    if (result == null) return null 
    return ArrayList(result) 
} 

Se io chiamo questo tipo:

var list : ArrayList<Person>? = p1.findSomeLikeThis() 

for (p2 in list) { 
    p2.delete() 
    p2.commit() 
} 

E mi avrebbe dato l'errore:

For-loop range must have an 'iterator()' method

mi manca qualcosa qui?

risposta

18

Il tuo ArrayList è di tipo nullable. Quindi, devi risolvere questo. Ci sono diverse opzioni:?

for (p2 in list.orEmpty()) { ... } 

o

list?.let { 
    for (p2 in it) { 

    } 
} 

oppure si può semplicemente restituire un elenco vuoto

public fun findSomeLikeThis(): List<T> //Do you need mutable ArrayList here? 
    = (Db4o.objectContainer()!!.queryByExample<T>(this as T) as Collection<T>)?.toList().orEmpty() 
+4

alternativa elencare .forEach {it.delete() ...} –

+0

'list? .for Anyach {...}' gestisce il null (come menzionato sopra, aggiungendo semplicemente il blocco di codice attorno ad esso) –

Problemi correlati