Java 使用我创建的对象为每个循环创建一个

Java 使用我创建的对象为每个循环创建一个,java,arrays,foreach,Java,Arrays,Foreach,所以我有一个名为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 *

所以我有一个名为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循环中的最后一个词是你所经历的事情的数组?我很困惑。

你应该这样定义你的arraylist:

private ArrayList<Item> carriedItems;
private ArrayList carriedItems;

您没有指定arraylist将保存的数据类型…

您应该这样定义arraylist:

private ArrayList<Item> carriedItems;
private ArrayList carriedItems;

您没有指定arraylist将保存的数据类型…

您应该使用泛型

private ArrayList<Item> carriedItems;

public Item getItem(){
// your code
}
private ArrayList carriedItems;
公共项getItem(){
//你的代码
}

泛型是用来解决这些问题的。

你应该使用泛型

private ArrayList<Item> carriedItems;

public Item getItem(){
// your code
}
private ArrayList carriedItems;
公共项getItem(){
//你的代码
}

泛型是用来解决这些问题的。

正如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;
}
private ArrayList carriedItems;
/**
*此私有帮助器方法检查ArrayList中请求的项名称。如果找到,请返回该项目。
*如果未找到,则返回null。
*@param项目的名称
*@返回物品对象
*/ 
公共项cherForItem(字符串名称){
用于(项目一:carriedItems)
if(name.compareTo(i.getName())==0)
返回i;
返回null;
}

正如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;
}
private ArrayList carriedItems;
/**
*此私有帮助器方法检查ArrayList中请求的项名称。如果找到,请返回该项目。
*如果未找到,则返回null。
*@param项目的名称
*@返回物品对象
*/ 
公共项cherForItem(字符串名称){
用于(项目一:carriedItems)
if(name.compareTo(i.getName())==0)
返回i;
返回null;
}