java - 将另一个变量的身份分配给一个变量
问题描述
我有一个 Item 类。每个 Item 对象都保存在 ItemNode 类的一个实例中。ItemNode 是我的 CustomList 类中的一个内部类。
我的 Item 类有一个名为 amount 的属性。这是指用户拥有多少该类型的项目
我的 ItemNode 类还有一个名为 amount 的属性。我希望 ItemNode 的 amount 属性始终等于它所拥有的 Item 对象的 amount 属性。
换句话说,(ItemNode.amount == ItemNode.item.amount)
, 应该始终为真,即使我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;
}
}
解决方案
不要给 ItemNode 类一个数量字段,因为这样做是在创建“并行字段”,并且必须努力确保它们保持同步,而实际上它们很容易不同步。相反,更简单地为您的 ItemNode 类提供一个公共getAmount()
方法,该方法简单地调用并返回其项目的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;
}
}
推荐阅读
- python - MYSQL python中删除查询的错误
- android - Android:Gradle - 模块依赖问题 - 找不到符号
- mongodb - MongoDB 分片存储使用情况
- c# - Allow only authorized code to call routines in library
- azure-devops - VSTS 测试失败但 vstest.console 通过;出于某种原因,断言在代码之前执行?
- ms-access - MS Access 更新查询未更新错误
- php - 为什么在codeigniter中会发生这种情况?
- c# - 当 url 在 mvc .net 应用程序中包含超过 3 个“/”时,没有得到自定义 404 错误页面
- python - WordNet 中的哪些语义相似性度量可用于带有 NLTK 的 Python?
- biometrics - 找不到可以将数据直接发送到 Web 服务器的生物识别系统