我有一个Load
班级和一个Cargo
班级。 Load
的实例包含Cargo
的实例。
class Load {
Cargo cargo
}
class Cargo {
String name
BigDecimal cost
}
让我们说name
实例的Cargo
是“摇滚”而cost
是“11.11”。现在,我使用此Cargo
实例创建Load
的实例。既然已经创建了Load
的实例,我不希望它的“货物”发生变化。例如,如果我将“摇滚”的价格更改为“22.22”,我不希望Load
实例中“货物”的价格发生变化。处理这种情况的最佳方法是什么?
答案 0 :(得分:1)
好吧,如果每个加载只能有一个货物(根据您的示例),您需要将<{1}}属性添加到< EM>负载的。然后,您需要在创建对象时复制成本。您可以通过Load对象中的重载方法执行此操作,或者只编写自己的方法将 Cargo 添加到 Load 。
如果您实际上每加载需要多个 Cargoes ,那么您将需要一个中间对象来表示连接。此对象将在关联时存储价格。这可能看起来像:
cost
当然,由于与Cargo的间接关系,你的对象模型会有点复杂。
修改的
处理多重相关情况的另一种方法是每次更新成本时复制货物。如果您期望class Load {
LoadCargo loadCargo
}
class LoadCargo {
Cargo cargo
BigDecimal cost
}
class Cargo {
String name
BigDecimal cost
}
主要是静态的,那么这可能会更有效。我通过添加一个“禁用”项目来处理这个问题,如下所示:
cost
我相信您可以简单地克隆货物更新,如下所示:
class Cargo {
String name
BigDecimal cost
boolean active = true
}
这只是一个猜测,它可能已经坏了。