我有一个Item类。每个Item对象都保存在ItemNode类的实例中。 ItemNode是我的CustomList类中的一个内部类。
我的Item类具有一个名为amount的属性。这是指用户拥有多少种此类物品
我的ItemNode类还具有一个名为amount的属性。我希望ItemNode的数量属性始终等于其持有的Item对象的数量属性。
换句话说,(ItemNode.amount == ItemNode.item.amount)
应该始终为true,即使以后我更改itemNode.amount
的值。
如何使Java对ItemNode.amount
和Item.amount
具有相同的身份?
我的ItemNode类:
/**
* 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;
}
}
答案 0 :(得分:2)
不要给您的ItemNode类一个数量字段,因为这样做会创建“平行字段”,并且必须尽力确保它们保持同步,而实际上它们很容易不同步。取而代之的是,为ItemNode类提供一个公共的getAmount()
方法,该方法只需调用并返回其项目的getAmount()
方法即可。如果需要setter方法,则相同。请记住,使您的代码尽可能不受白痴的影响。还要研究Decorator设计模式,因为这个问题似乎可以部分解决。
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;
}
}