java - 是否可以在创建对象后使其不可变
问题描述
我正在创建一个对象:
public class Car {
private ArrayList<Door> doors;
private Engine engine;
public Car(ArrayList<Door> doors) {
this.doors = doors;
}
public Car setDoors(ArrayList<Door> doors) {
this.doors = doors;
return this;
}
public Car setEngine(Engine engine) {
this.engine = engine;
return this;
}// and getters
}
虽然它有公共设置器,但是否可以创建此类的实例,然后在创建后使其不可变?
解决方案
不可变对象是不可更改的对象,这意味着一旦创建它就无法更改其字段。基本上,您必须省略所有设置器并将字段声明为final
. 将类声明为final
确保没有人可以继承它。
public final class Car {
private final List<Door> doors;
private final Engine engine;
public Car(final Engine engine, final List<Door> doors) {
this.engine = engine;
this.doors = doors;
}
// Getters ONLY
}
此示例确保该类不仅是不可变的,而且是constant
. 我强烈推荐你阅读一篇关于不可变梯度的文章。
推荐阅读
- php - 如何在 PHP 中访问这个 XML 文件中的数据?
- c++ - constexpr new 如何分配内存?
- javascript - socket.emit 仅在递归函数(使用 requestAnimationFrame 实现)终止后才有效
- numpy - pytorch 与 autograd.numpy
- django - Django 管理器将 m2m 的第一个元素注释为 fk
- php - 无法将多选下拉值保存到数据库
- pdf - 为什么 PDF 表单的互操作性如此不同?
- sas - SAS:如何在 libname 语句中防止“警告:未解析宏的明显调用”?
- c++ - 从 VS6 升级到 VS2017 数学差异
- hybris - SAP Hybris Backoffice - 默认打开高级搜索