2015-03-22 1 views
7

Ich habe den folgenden Code:Kotlin: For-Schleife muss eine Iterator-Methode haben - ist das ein Fehler?

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) 
} 

Wenn ich dies wie nennen:

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

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

Es würde mir den Fehler geben:

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

ich hier etwas fehle?

Antwort

18

Ihr ArrayList ist vom nullfähigen Typ. Also musst du das lösen. Es gibt mehrere Optionen:

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

oder

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

    } 
} 

oder Sie können nur eine leere Liste

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

Alternativ Liste zurückzukehren .forEach {it.delete() ...} –

+0

'list? .forEach {...}' behandelt den Nullwert (wie oben erwähnt, indem einfach der Code-Block um ihn herum hinzugefügt wird) –

Verwandte Themen