不可变对象需要满足的条件
1 对象创建以后其状态就不能修改
2 对象所有域都是final类型 (这样只能对每个域赋值一次,通过构造器初始化所有成员,进行深度拷贝,在get方法中不直接返回对象本身,而是克隆对象并返回克隆)
3 对象是正确创建的(在对象创建期间,this引用没有逸出)
public class ImmutableObject { private final Integer a = 1; private final String b = "2"; private final Map<Integer, Integer> map = new HashMap<>(); public ImmutableObject() { map.put(1, 2); map.put(3, 4); map.put(5, 6); } public Map<Integer, Integer> getMap() { // 返回的是新new的map,并且不允许修改 return Collections.unmodifiableMap(map); } }