不可变对象非常好,因为它们在多线程应用程序中不需要特别的关心或维护。然而,许多对象几乎不能自然地成为不可变对象。例如,一个订单被提交,处理后,在订单填写时分配一个永久ID。该ID无法在订单创建和提交时给出,但稍后(或者可能永远)到达。
可能的解决方案:
- 在订单创建时分配另一个唯一ID。然后,当永久(订单已满)ID到来时,将其存储在Map中。因此,订单类将是不可变的。然后,如果Map键不存在,则我们会知道订单尚未填写。(Map应该是静态类字段吗?)
- 另一种解决方案是使永久ID字段可变,并应用适当的同步。此外,我们可以限制ID仅在对象的生命周期内设置一次。
这些解决方案合理吗?还有其他想法吗?谢谢。
withX(..)
还是像Stephen C建议的那样进行同步更好。还涉及到一些其他问题,例如应用程序显示(GUI或控制台)。我认为选择哪种方式取决于它将如何使用。在我的情况下,我仍在分析中。 - Pete