【发布时间】:2019-02-23 14:04:29
【问题描述】:
我正在阅读 Effective java 第三版。题目是
第 17 条:最小化可变性
在本主题中讨论了不可变对象,以及不使类最终化但仍将是不可变的替代方法。
这是主题中写的内容:
回想一下,为了保证不变性,一个类不能允许自己被子类化。这可以通过将类设为 final 来完成,但还有另一种更灵活的选择。私有或包私有并添加公共静态工厂代替公共构造函数。
我同意将构造函数设为私有,这将使类无法被子类化。但是具有包私有构造函数的类可以在包中进行子类化。那么使用包私有构造函数,类仍然是不可变的吗?
编辑 1:
具有包私有构造函数的类对于包外的类仍然是不可变的。但是这种方法有用吗?
【问题讨论】:
-
不保证是,不。可以在同一个包中创建可变子类。
-
如果包维护者主要关心包的用户,他们可能会认为这是对不变性的足够好的强制执行
标签: java immutability