首页 > 解决方案 > 是否可以在创建对象后使其不可变

问题描述

我正在创建一个对象:

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
}

虽然它有公共设置器,但是否可以创建此类的实例,然后在创建后使其不可变?

标签: java

解决方案


不可变对象是不可更改的对象,这意味着一旦创建它就无法更改其字段。基本上,您必须省略所有设置器并将字段声明为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. 我强烈推荐你阅读一篇关于不可变梯度的文章。


推荐阅读