Kotlin: For-loop должен иметь метод итератора – это ошибка?

У меня есть код ниже:

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

Если я так назову:

 var list : ArrayList<Person>? = p1.findSomeLikeThis() for (p2 in list) { p2.delete() p2.commit() } 

Это дало бы мне ошибку: «Для диапазона циклов должен иметь метод итератора». Я что-то упустил?

Ваш ArrayList имеет тип NULL. Итак, вы должны решить это. Существует несколько вариантов:

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

или

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

или вы можете просто вернуть пустой список

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