arrays - Kotlin:For 循环必须有一个迭代器方法——这是一个错误吗?

标签 arrays kotlin

我有以下代码:

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 range must have an 'iterator()' method

我错过了什么吗?

最佳答案

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

关于arrays - Kotlin:For 循环必须有一个迭代器方法——这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29201182/

相关文章:

rx-java - 递归地将Rx单例组合到Observable中

testing - perform.onClick()未执行点击

ruby - 排序数组,并选择最小的数字?

arrays - 矢量搜索算法

c++ - 我可以查询指针是否是动态分配数组中的第一个吗?

php - 如何通过连接从 MySQL select 获取嵌套数组

java - 根据任意索引对数组进行排序

Android:Kotlin TypeCastException: null 无法转换为非空类型 kotlin.String

java - 如果我们使用基于单一 Activity 的架构,View Model 可能会很重

string - 是否有正则表达式可以切换字符串中的字符大小写?