在PHP开发很长一段时间后,我决定进入Java。在OOP方法中很舒服,所有这一切,我都试图在java中开始这一点,但是我正忙着将我的arraylist对象传递给for语句,使用Item类方法打印出来。 / p>
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中以错误的方式解决这个问题?正确的例子会有所帮助。
最佳, 列维
答案 0 :(得分:7)
我的朋友,你有一个非常奇怪的建筑。您不应该在任何地方使用通用Object
,而是使用实际类型。第一件事:
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时,这对我很有用,也许其他人也可以提出一些好的消息来源。
答案 1 :(得分:1)
好的,有两件事。一个是都铎是绝对正确的,最好是直接使用你期望的课程,而不是对象,风格上他的观点也是准确的。
两个是如果你真的必须使用一个对象列表,你需要从对象转换回你期望接收的任何类型。
List<Object> list = inv.getAllInventoryItems();
for (Object item : list){
System.out.println((Items) item).getItemName();
}
但是,我不建议这样做,因为它有效地采取了应该是编译时错误并使其成为RunTime错误(如果该类无法转换)。