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

我有以下代码:

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

https://stackoverflow.com/questions/29201182/

相关文章:

android - 抑制 "Identifier not allowed in Android"

java - Kotlin 文件是否应该放在 Android 中的单独源目录中?

string - 字符串中的美元符号字符

java - Smartcast 是不可能的,因为属性有开放的或自定义的 getter

intellij-idea - 为什么 IntelliJ 建议将调用链转换为序列?

kotlin - 如何使用 Gradle Kotlin 脚本创建胖 JAR?

java - isInitialized - lateinit var 的支持字段此时不可访问

kotlin - 带有 T.() 的 Kotlin 函数签名是什么意思?

android - 带有命名参数的 Kotlin 中的 Dagger 2 构造函数注入(inject

kotlin - 如何在 Kotlin 中克隆对象?