2015-03-22 33 views
7

Tôi có đoạn mã sau:Kotlin: For-loop phải có một phương thức iterator - đây có phải là lỗi không?

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

Nếu tôi gọi đây như:

var list : ArrayList<Person>? = p1.findSomeLikeThis() 

for (p2 in list) { 
    p2.delete() 
    p2.commit() 
} 

Nó sẽ cung cấp cho tôi những lỗi:

For-loop range must have an 'iterator()' method

Tôi có thiếu cái gì ở đây?

Trả lời

18

ArrayList của bạn có loại không có giá trị. Vì vậy, bạn phải giải quyết vấn đề này. Có một số tùy chọn:

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

hoặc

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

    } 
} 

hoặc bạn chỉ có thể trả về một danh sách trống

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

Ngoài ra danh sách .forEach {it.delete() ...} –

+0

'list? .forEach {...}' xử lý null (như đã đề cập ở trên, chỉ cần thêm khối mã xung quanh nó) –

Các vấn đề liên quan