Java迭代问题

时间:2011-06-16 21:17:43

标签: java iteration iterable

“Catalog”是一个存储“Item”对象集合的类。为此,我选择使用List集合。所以它看起来像:

public class Catalog {
     List<Item> itemList;

主类必须能够使用for循环访问Item元素,该循环将Catalog对象视为集合本身。假设名为“catalog:”的目录对象

for (Item items : catalog) {
     //various operations involving item
}

问题:我收到了不兼容的类型错误。

found: java.lang.Object
requird: Item

我的Catalog类实现了Iterable,并且有一个方法iterator(),它返回List的迭代器:

public Iterator iterator() {
    Iterator itr = itemList.iterator();
    return itr;
}   

那么我做错了什么?

7 个答案:

答案 0 :(得分:3)

Catalog需要实施Iterable<Item>,其iterator()方法需要返回Iterator<Item>

答案 1 :(得分:3)

public class Catalog implements Iterable<Item>{
public Iterator<Item> iterator(){
  return itemList.iterator();
}

答案 2 :(得分:0)

确保它实现Iterable<Item>,而不仅仅是Iterable

答案 3 :(得分:0)

需要实施Iterable<Item>

答案 4 :(得分:0)

您需要为迭代器

指定一个类型参数
public Iterator<Item> iterator() {
    Iterator<Item> itr = itemList.iterator();
    return itr;
}   

Catalag implements Iterable确定implements Iterable<Item>时。

答案 5 :(得分:0)

它应该实现:

 Iterable<Item>

(注意参数)

答案 6 :(得分:0)

尝试类似:

for(Item item : catalog.itemList) {
    item.getProperty();
    // ... and so on.
}

因为Catalog类不可迭代,但是它的itemList List是。