【问题标题】:Java iteration problemJava迭代问题
【发布时间】:2011-09-16 17:59:06
【问题描述】:

“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;
}   

那我做错了什么?

【问题讨论】:

    标签: java iteration iterable


    【解决方案1】:

    尝试类似:

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

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

    【讨论】:

      【解决方案2】:

      应该实现:

       Iterable<Item>
      

      (注意参数)

      【讨论】:

        【解决方案3】:
        public class Catalog implements Iterable<Item>{
        public Iterator<Item> iterator(){
          return itemList.iterator();
        }
        

        【讨论】:

        • : 在java中不用于指定类型继承。
        【解决方案4】:

        需要为迭代器指定类型参数

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

        Catalag implements Iterable 确保它implements Iterable&lt;Item&gt;

        【讨论】:

          【解决方案5】:

          需要实现Iterable&lt;Item&gt;

          【讨论】:

            【解决方案6】:

            确保它实现Iterable&lt;Item&gt;,而不仅仅是Iterable

            【讨论】:

              【解决方案7】:

              Catalog需要实现Iterable&lt;Item&gt;,其iterator()方法需要返回Iterator&lt;Item&gt;

              【讨论】:

                猜你喜欢
                • 2012-03-03
                • 1970-01-01
                • 2016-06-15
                • 1970-01-01
                • 1970-01-01
                • 2012-10-15
                • 2012-12-14
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多