创建一个包含对象的对象?

时间:2013-12-12 23:04:37

标签: java parent-child

我正在尝试创建广告资源跟踪系统。我有一个名为“InventoryItem”的类(在Java中),它具有名称和数量的属性。

这适用于简单对象,但如果我的库存项目包含其他库存项目,例如带RAM的服务器怎么办?

我应该创建自己的数据类型,还是有更好的方法(链接列出可能)?我的类应该扩展该数据类型的任何内容,还是应该不打扰创建自己的类?

到目前为止我的课程:

public class InventoryItem {
    private String name;
    private int quantity;
    private InventoryItem childInventoryItem;

    // CONSTRUCTORS
    public InventoryItem() {
    }

    public InventoryItem(int quantity, String name) {
        this.quantity = quantity;
        this.name = name;
    }

    //GETTERS
    public String getName() {
        return name;
    }

    public int getQuantity() {
        return quantity;
    }

    //SETTERS

    public void setName(String name) {
        this.name = name;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
}

2 个答案:

答案 0 :(得分:1)

树通常涉及任何亲子关系。如果您没有做任何复杂的事情,您可以简单地维护一个基本上List<InventoryItem>的内部列表,其中包含任何子项。

所以你要加入你的课程就是这样:

public class InventoryItem {

    ...
    private List<InventoryItem> composingItems = new ArrayList<>(); //if still using Java 6 this must be new ArrayList<InventoryItem>();

    ...

    public void addComposingItem(InventoryItem composingItem) {
        composingItems.add(composingItems);
    }

    public List<InventoryItem> getComposingItems() {
        //Enforce immutability so no one can mess with the collection. However
        //this doesn't guarantee immutability for the objects inside the list;
        //you will have to enforce that yourself.
        return Collections.umodifiableList(composingItems);
    }
}

答案 1 :(得分:0)

有很多方法可以做到这一点。我认为最简单的方法是创建一个数组列表。

ArrayList<InventoryItem> childInventory = new ArrayList<InventoryItem>();

然后创建一个将库存项目添加到此数组的setter

public void addChildItem(InventoryItem child)
    childInventory.add(child);

这样您就可以获得项目中所有子项的列表。您还可以创建一个方法来返回数组或ArrayList中所有子项的列表。

public ArrayList<InventoryItem> getChildItems()
    return childInventory;