Java对象数组Foreach方法访问

Java对象数组Foreach方法访问,java,arrays,object,arraylist,Java,Arrays,Object,Arraylist,在用PHP开发了很长一段时间之后,我决定进入Java。在OOP方法学和所有这些方面我都很熟悉,我试图从java中的这一点开始,但是我在将arraylist对象传递到for语句中时遇到了问题,以便使用Item类方法打印出来 HelloInvetory.java Inventory.java for(Object item : InvetoryItems){ System.out.println(item.getItemName()); } 我被困在H

在用PHP开发了很长一段时间之后,我决定进入Java。在OOP方法学和所有这些方面我都很熟悉,我试图从java中的这一点开始,但是我在将arraylist对象传递到for语句中时遇到了问题,以便使用Item类方法打印出来

HelloInvetory.java

Inventory.java

for(Object item : InvetoryItems){
               System.out.println(item.getItemName());
        }
我被困在HelloInventory.java中

for(Object item : InvetoryItems){
               System.out.println(item.getItemName());
        }
IDE(Eclipse)给了我一个错误“只能迭代java.lang.Iterable的数组或实例”。我是否需要一些额外的东西,或者我用Java完全错误的方法来解决这个问题?正确的例子会有帮助

最好的,
李维

我的朋友,你这里的建筑很奇怪。您不应该到处使用泛型
对象
s,而应该使用实际类型。第一件事:

public Object getAllInventoryItems() {
    //return InventoryItems;
     return this.InventoryItems.toArray();
}
为什么不直接返回
列表本身呢

public List<Item> getAllInventoryItems() {
     return this.InventoryItems;
}
现在迭代
列表
是一帆风顺的:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<Item> InvetoryItems;

    Inventory inv = new Inventory();
    inv.createItemObj(101, "camera", "Used camera that I bought off of a homeless guy.", 500);
    InvetoryItems = inv.getAllInventoryItems();

    for(Item item : InvetoryItems){
           System.out.println(item.getItemName());
    }

    System.out.println("Done");
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
列出投资项目;
存货存货=新存货();
inv.createItemObj(101,“相机”,“我从一个无家可归的家伙那里买的二手相机”,500);
InvetoryItems=inv.getAllInventoryItems();
用于(项目:InvetoryItems){
System.out.println(item.getItemName());
}
系统输出打印项次(“完成”);
}
顺便说一句,出于习惯,我把
项目
改为
项目
。类名应该表示单个实体,所以按照惯例它是单数的


现在,请不要误会,但您可能对Java的理解有误,因此我强烈建议您阅读以下内容:当我开始使用Java时,这对我很有用,也许其他人也可以推荐一些好的源代码。

好的,有两件事。一是都铎是绝对正确的,最好直接使用你期望的类,而不是对象,而且他的观点在风格上也是准确的

第二,如果您真的必须使用对象列表,那么您需要从对象回溯到您希望接收的任何类型

List<Object> list = inv.getAllInventoryItems();
for (Object item : list){
    System.out.println((Items) item).getItemName();
}
List List=inv.getAllInventoryItems();
用于(对象项:列表){
System.out.println((Items)item.getItemName();
}
但是,我不建议这样做,因为这会有效地导致编译时错误,并使其成为运行时错误(如果无法强制转换该类)

List<Item> InventoryItems = new ArrayList<Item>();
public void setInventoryItems(Item inventoryItems) {
     this.InventoryItems.add(inventoryItems);
}
public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<Item> InvetoryItems;

    Inventory inv = new Inventory();
    inv.createItemObj(101, "camera", "Used camera that I bought off of a homeless guy.", 500);
    InvetoryItems = inv.getAllInventoryItems();

    for(Item item : InvetoryItems){
           System.out.println(item.getItemName());
    }

    System.out.println("Done");
}
List<Object> list = inv.getAllInventoryItems();
for (Object item : list){
    System.out.println((Items) item).getItemName();
}