Java 对象数组 Foreach 方法访问
Posted
技术标签:
【中文标题】Java 对象数组 Foreach 方法访问【英文标题】:Java Object Array Foreach Method Access 【发布时间】:2012-02-27 01:31:14 【问题描述】:在 php 开发了很长时间后,我决定踏入 Java。在 OOP 方法和所有这些方面很舒服,我试图从 java 中的那个点开始,但我对将我的 arraylist 对象传递到一个 for 语句以使用 Item 类方法打印回来感到困惑。
HelloInvetory.java
package helloInventory;
import java.util.Arrays;
public class HelloInventory
/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
Object InvetoryItems;
Inventory inv = new Inventory();
inv.createItemObj(101, "camera", "Used camera that I bought off of a homeless guy.", 500);
InvetoryItems = inv.getAllInventoryItems();
for(Object item : InvetoryItems)
System.out.println(item.getItemName());
System.out.println("Done");
Inventory.java
package helloInventory;
import java.util.*;
/**
* Tracks and maintains all items within the inventory
* @author levi
*
*/
public class Inventory
List<Object> InventoryItems = new ArrayList<Object>();
/*
* create object from Items class
* and insert into Object[] array.
*/
public void createItemObj(int sku, String name, String descriptor, float price)
Items item = new Items();
item.setSku(sku);
item.setItemName(name);
item.setItemDescription(descriptor);
item.setItemPrice(price);
this.setInventoryItems(item);
public Object getAllInventoryItems()
//return InventoryItems;
return this.InventoryItems.toArray();
public void setInventoryItems(Object inventoryItems)
//InventoryItems.add(inventoryItems);
this.InventoryItems.add(inventoryItems);
Items.java
package helloInventory;
/**
* Class object to hold each item details
* @author levi
*
*/
public class Items
int sku;
String itemName;
String itemDescription;
float itemPrice;
public int getSku()
return sku;
public void setSku(int sku)
this.sku = sku;
public String getItemName()
return itemName;
public void setItemName(String itemName)
this.itemName = itemName;
public String getItemDescription()
return itemDescription;
public void setItemDescription(String itemDescription)
this.itemDescription = itemDescription;
public float getItemPrice()
return itemPrice;
public void setItemPrice(float itemPrice)
this.itemPrice = itemPrice;
我被困在 HelloInventory.java 中
for(Object item : InvetoryItems)
System.out.println(item.getItemName());
IDE (Eclipse) 给我错误“只能迭代数组或 java.lang.Iterable 的实例”。我需要额外的东西,还是我在Java中完全错误地解决了这个问题?正确的例子会有所帮助。
最好, 列维
【问题讨论】:
【参考方案1】:我的朋友,你这里的建筑很奇怪。您不应该在任何地方使用泛型 Object
s,而是使用实际类型。第一件事:
public Object getAllInventoryItems()
//return InventoryItems;
return this.InventoryItems.toArray();
为什么不直接返回 List
本身?
public List<Item> getAllInventoryItems()
return this.InventoryItems;
也改变这个:
List<Item> InventoryItems = new ArrayList<Item>();
还有这个:
public void setInventoryItems(Item inventoryItems)
this.InventoryItems.add(inventoryItems);
现在迭代List
是一帆风顺的:
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");
顺便说一句,我出于习惯将Items
更改为Item
。类名应该表示单个实体,因此按照惯例它是单数的。
现在不要采取错误的方式,但您可能在 Java 上走错了路,所以我强烈推荐阅读以下内容:http://www.mindview.net/Books/TIJ/ 当我开始使用 Java 时,这对我有用,也许其他人可以也推荐一些好的来源。
【讨论】:
【参考方案2】:好的,有两件事。一是 Tudor 是绝对正确的,最好直接使用你期望的类,而不是 Objects,而且他的观点在风格上也很准确。
第二个是,如果您真的必须使用对象列表,则需要从对象转换回您期望接收的任何类型。
List<Object> list = inv.getAllInventoryItems();
for (Object item : list)
System.out.println((Items) item).getItemName();
但是,我不建议这样做,因为它会有效地处理应该是编译时错误并使其成为运行时错误(如果无法强制转换类)。
【讨论】:
以上是关于Java 对象数组 Foreach 方法访问的主要内容,如果未能解决你的问题,请参考以下文章