web-dev-qa-db-fra.com

Kotlin: La boucle for doit avoir une méthode itérateur - est-ce un bug?

J'ai le code suivant:

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

Si j'appelle cela comme:

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

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

Cela me donnerait l'erreur:

La plage For-loop doit avoir une méthode 'iterator ()'

Est-ce que j'ai râté quelque chose?

19
LEMUEL ADANE

Votre ArrayList est de type nullable. Donc, vous devez résoudre ce problème. Il y a plusieurs options:

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

ou

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

    }
}

ou vous pouvez simplement retourner une liste vide

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

Je suis également confronté à ce problème lorsque je boucle sur quelque chose, ce n'est pas un tableau.
Exemple

fun maximum(prices: Array<Int>){
    val sortedPrices = prices.sort()
    for(price in sortedPrices){ // it will display for-loop range must have iterator here (because `prices.sort` don't return Unit not Array)

    }
}

C'est un cas différent de cette question mais j'espère que cela vous aidera

0
Linh