2

作为标题,我正在阅读<Effective Java>,但是当我阅读第 2 章时,它说

4

2 回答 2

2

当对象是不可变的时,与对象(如 JavaBeans)是可变的时相比,您不必担心太多。一旦你有了一个不可变对象,它基本上就不会受到线程同步问题的影响,并且你可以自由地传递它而无需制作防御性副本(以保护用户或善意的库方法不更改数据)。

自然地,创建一个可变对象可能很棘手,并且可能涉及构造函数太长而无法管理。这就是 Builder 模式可以帮助您的地方——使用可变的 Builder 来创建初始状态,然后将其复制到该对象的构造函数中的不可变对象。

请注意,如果不可变对象包含对任何可变对象的引用,则外部对象并不是真正不可变的。您可能会在GuavaImmutableList中找到、ImmutableMapImmutableSet方便。

于 2012-11-02T02:46:39.743 回答
0

Builder模式更安全,因为 Builder 可以在将所有参数传递给构造函数之前验证所有参数。

您可能会Preconditions从 Google 找到这方面的便利。

更不用说,使用 Builder 可以非常简洁地构造复杂的对象。

我不会说遵循构建器模式的对象immutableJavaBean. 这取决于您如何声明字段以及您公开哪些方法。

于 2012-11-02T04:07:14.870 回答