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

它会给我错误:“For-loop范围必须有一个迭代器方法”。 我在这里错过了什么?

你的ArrayList是可为空的类型。 所以,你必须解决这个问题。 有几个选项:

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