【问题标题】:Struggling with making a for each loop using a object I made努力使用我制作的对象为每个循环制作一个
【发布时间】:2015-12-07 14:52:07
【问题描述】:

所以我有一个名为 Item 的对象数组,我想使用 for each 循环来遍历这个数组。

private ArrayList carriedItems;
  /**
 * this private helper method checks the ArrayList for the requested Item name.  If found, return the Item.  
 * If not found, return null.
 * @param the name of the item
 * @return the item object
 */ 
public Item cherForItem(String name){
    for(Item i: carriedItems)
        if(name.compareTo(i.getName())==0)
            return i;
    return null;
}

当我编译时,我得到一个不兼容的类型:java.lang.Object 无法转换为 Item。我知道这意味着它需要一个 Item 对象,但我认为 for each 循环中的最后一个词是您正在经历的一系列事情?我很困惑。

【问题讨论】:

    标签: java arrays foreach


    【解决方案1】:

    你应该像这样定义你的数组列表:

    private ArrayList<Item> carriedItems;
    

    您没有指定您的数组列表将保存的数据类型...

    【讨论】:

      【解决方案2】:

      正如 brso05 所指出的,您必须使用模板括号指定 ArrayList 内容的数据类型(否则内容将转换为 Java.Lang.Object)

      声明ArrayList变量carriedItems时指定类型,应该没问题:

      private ArrayList<Item> carriedItems;
        /**
       * this private helper method checks the ArrayList for the requested Item name.  If found, return the Item.  
       * If not found, return null.
       * @param the name of the item
       * @return the item object
       */ 
      public Item cherForItem(String name){
          for(Item i: carriedItems)
              if(name.compareTo(i.getName())==0)
                  return i;
          return null;
      }
      

      【讨论】:

        【解决方案3】:

        您应该使用泛型。

        private ArrayList<Item> carriedItems;
        
        public Item getItem(){
        // your code
        }
        

        泛型是为解决此类问题而设计的。

        【讨论】: