为变量分配另一个身份

Assigning a Variable the Identity of Another

我有一个项目 class。每个 Item 对象都保存在 ItemNode class 的一个实例中。 ItemNode 是我的 CustomList class.

中的一个内部 class

我的物品 class 有一个名为 amount 的属性。这是指用户拥有多少该类型的项目

我的 ItemNode class 也有一个名为 amount 的属性。我希望 ItemNode 的数量属性始终等于它持有的 Item 对象的数量属性。

换句话说,(ItemNode.amount == ItemNode.item.amount) 应该始终为真,即使我稍后更改 itemNode.amount 的值也是如此。

如何让 Java 对 ItemNode.amountItem.amount 具有相同的身份?

我的ItemNode Class:

/**
 * Creates nodes to hold Item objects.
 */
private class ItemNode {
   // the object being held by the node
   private Item item;
   // The type of the object
   private String typeName;
   // How many are owned by the player
   private int amount;
   // What the item-subclass's name is
   private String itemName;
   // the node after this
   private ItemNode next;

   ItemNode(Item item) {

      this.data = item;
      this.typeName = typeName;
      this.itemName = item.getItemName();
      this.amount = item.getAmount();
      this.next = null;
   }
}

不要给你的 ItemNode class 一个金额字段,因为这样做你正在创建 "parallel fields" 并且必须努力确保它们保持同步,而事实上它们可以很容易不同步。相反,更简单地给你的 ItemNode class 一个 public getAmount() 方法,它简单地调用和 returns 它的项目的 getAmount() 方法。如果您需要 setter 方法,则相同。请记住使您的代码尽可能地防白痴。还要查看装饰器设计模式,因为这个问题似乎可以部分解决。

public interface Amountable {

    int getAmount();

    void setAmount(int amount);

}

public class Item implements Amountable {
    private int amount;

    public Item(int amount) {
        this.amount = amount;
    }

    @Override
    public int getAmount() {
        return amount;
    }

    @Override
    public void setAmount(int amount) {
        this.amount = amount;
    }

}

public class ItemNode<T extends Amountable> implements Amountable {
    private T item;

    public ItemNode(T item) {
        this.item = item;
    }

    @Override
    public int getAmount() {
        return item.getAmount();
    }

    @Override
    public void setAmount(int amount) {
        item.setAmount(amount);
    }    

    public T getItem() {
        return item;
    }
}