作为标题,我正在阅读<Effective Java>,但当我阅读chapter2时,它说
发布于 2012-11-02 10:46:40
当对象是不可变的时,与对象(如JavaBeans)可变时相比,您需要担心的事情要少得多。一旦你有了一个不可变的对象,它基本上就不会受到线程同步问题的影响,而且你可以自由地传递它,而不需要制作防御性的副本(以保护用户或善意的库方法不会更改数据)。
当然,创建可变对象可能很棘手,而且可能涉及太长的构造函数而无法管理。这就是Builder模式可以帮助您的地方--使用可变的Builder创建初始状态,然后将其复制到该对象的构造函数中的不可变对象。
请注意,如果不可变对象包含对任何可变对象的引用,则外部对象并不是真正不可变的。您可能会在Guava中找到ImmutableList、ImmutableMap和ImmutableSet。
发布于 2012-11-02 12:07:15
Builder模式更安全,因为构建器可以在将所有参数传递到构造函数之前对其进行验证。
你可能会发现谷歌的Preconditions在这方面很方便。
更不用说,使用Builder使构造复杂对象变得非常简洁。
我不会说遵循构建器模式的对象比JavaBean或多或少是immutable或可变的。这取决于您如何声明字段以及您公开的方法。
https://stackoverflow.com/questions/13188544
复制相似问题