Arrays Kotlin:For循环必须有一个迭代器方法-这是一个bug吗?
我有以下代码:Arrays Kotlin:For循环必须有一个迭代器方法-这是一个bug吗?,arrays,kotlin,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) } public fun findSomeLi
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)
}
public fun findSomeLikeThis():ArrayList?{
val result=Db4o.objectContainer()!!.queryByExample(此为T)作为集合
if(result==null)返回null
返回ArrayList(结果)
}
如果我这样称呼它:
var list : ArrayList<Person>? = p1.findSomeLikeThis()
for (p2 in list) {
p2.delete()
p2.commit()
}
var列表:ArrayList?=p1.找到一些类似于此()
用于(列表中的p2){
p2.删除()
p2.提交()
}
这会给我一个错误:
For循环范围必须具有“iterator()”方法
我在这里遗漏了什么吗?您的
ArrayList
是可空类型。所以,你必须解决这个问题。有几种选择:
for (p2 in list.orEmpty()) { ... }
或
或者您可以返回一个空列表
public fun findSomeLikeThis(): List<T> //Do you need mutable ArrayList here?
= (Db4o.objectContainer()!!.queryByExample<T>(this as T) as Collection<T>)?.toList().orEmpty()
public fun findSomeLikeThis():List//此处是否需要可变数组列表?
=(Db4o.objectContainer()!!.queryByExample(作为T)作为集合)?.toList().orEmpty()
当我在某些东西上循环它不是数组时,我也会遇到这个问题。范例
fun最大值(价格:数组){
val sortedPrices=prices.sort()
for(price in sortedPrices){//它将显示for循环范围,这里必须有迭代器(因为`prices.sort`不返回单位而不是数组)
}
}
这与这个问题的情况不同,但希望它能有所帮助当您从共享首选项中读取数据并获得一个(可能)可为空的iterable对象(如
StringSet
)时,Android中也会出现这种情况。即使提供默认值,编译器也无法确定返回的值实际上永远不会为null。我找到的唯一解决方法是使用断言返回的表达式不是null代码>运算符,如下所示:
val prefs = PreferenceManager.getDefaultSharedPreferences(appContext)
val searches = prefs.getStringSet("saved_searches", setOf())!!
for (search in searches){
...
}
试一试
或者list?.forEach{it.delete()…}list?.forEach{…}
处理空值(如上所述,只是在其周围添加代码块),这应该是可以接受的答案。这是唯一一个对我有用的。
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)
}
}
val prefs = PreferenceManager.getDefaultSharedPreferences(appContext)
val searches = prefs.getStringSet("saved_searches", setOf())!!
for (search in searches){
...
}
for(p2 in 0 until list.count()) {
...
...
}