我在学习Java方面仍然相当新,我需要一种方法将从某个类构造的每个对象放入我稍后可以访问的ArrayList中。
这是我的Item
课程:
import java.util.ArrayList;
import java.util.*;
public class Item
{
private String name;
private int quantity;
private ArrayList<Item> allItems = new ArrayList<Item>(); //the ArrayList I'm trying to fill with every Item object
/**
* Constructs an item of a given name and quantity
* @param name Item name
* @param quantity How much of an item the player has
*/
public Item(String name, int quantity)
{
this.name = name;
this.quantity = quantity;
}
/**
* @return Item name
*/
public String getItemName()
{
return name;
}
/**
* @return Quantity of the item
*/
public int getQuantity()
{
return quantity;
}
/**
* @return A list of items that have a quantity > 0
*/
public ArrayList<Item> getInventory()
{
ArrayList<Item> inventory = new ArrayList<Item>();
for(Item i : allItems)
{
if(i.getQuantity() > 0)
inventory.add(i);
}
return inventory;
}
}
每次构建Item
时,如何将allItems
对象添加到{{1}}?
答案 0 :(得分:3)
首先,arraylis必须是静态的,因此它在所有实例之间共享。 否则,每个实例都会有一个不同的变量。
有关实例/班级成员here的更多信息。
private String name;
private int quantity;
private static ArrayList<Item> allItems = new ArrayList<Item>();
然后,您可以在构造函数中添加创建的实例,将其称为“this”。
public Item(String name, int quantity)
{
this.name = name;
this.quantity = quantity;
allItems.add(this);
}
答案 1 :(得分:1)
您当然希望所有项目都有一个列表,而不是每个项目都要随身携带并维护自己的所有项目的副本列表。如果这是您的意图,您应该将列表定义为static
:
private static ArrayList<Item> allItems = new ArrayList<Item>()
静态变量由类的所有实例共享。
在Item的构造函数中,只需将this
添加到所有项目的列表中。
allItems.add(this);
答案 2 :(得分:0)
一种可能的解决方案是将项目列表声明为静态,如下所示:
public static List<Item> allItems = new ArrayList<Item>();
之后您可以使用以下代码段访问它:
Item.allItems // example would be System.out.println(Item.allItems)
此外,在构造函数中,您将需要以下代码:
public Item(String name, int quantity) {
this.name = name;
this.quantity = quantity;
this.allItems.add(this);
}
但谨慎使用此方法,因为它会将每个创建的项目添加到列表中,这可能会导致内存泄漏。
答案 3 :(得分:0)
您需要一个静态List,然后您可以使用类构造函数将此对象添加到列表中。
import java.util.ArrayList;
import java.util.*;
public class Item
{
private String name;
private int quantity;
private static ArrayList<Item> allItems = new ArrayList<Item>(); //the ArrayList I'm trying to fill with every Item object
/**
* Constructs an item of a given name and quantity
* @param name Item name
* @param quantity How much of an item the player has
*/
public Item(String name, int quantity)
{
this.name = name;
this.quantity = quantity;
allItems.add(this);
}
/**
* @return Item name
*/
public String getItemName()
{
return name;
}
/**
* @return Quantity of the item
*/
public int getQuantity()
{
return quantity;
}
/**
* @return A list of items that have a quantity > 0
*/
public static ArrayList<Item> getInventory()
{
ArrayList<Item> inventory = new ArrayList<Item>();
for(Item i : allItems)
{
if(i.getQuantity() > 0)
inventory.add(i);
}
return inventory;
}
}