2011-06-16 111 views
0

“目录”是存储“项目”对象的集合类。我已经选择使用List集合来达到这个目的。所以它看起来像:的Java迭代问题

public class Catalog { 
    List<Item> itemList; 

的主类必须能够与一个访问项目元素循环,把一个目录的物体,像集合本身。假设一个名为“目录:”的目录对象:

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

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

found: java.lang.Object 
requird: Item 

我的目录类实现了Iterable并有一个方法迭代器()返回一个迭代器列表:

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

那我做错了吗?

回答

3

Catalog需要执行Iterable<Item>及其iterator()方法需要返回Iterator<Item>

0

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

0

它需要实现Iterable<Item>

0

你需要指定一个类型参数的迭代器

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

Catalag implements Iterable确保它implements Iterable<Item>

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

':'不使用在java中指定类型继承。 – 2011-06-16 21:21:33

+0

@Mike哈哈谢谢 – 2011-06-16 21:22:25

0

它应该实现:

Iterable<Item> 

(注意参数)

0

试着这么做:

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

为您Catalog类不是可迭代的,但它是itemList中列表是。