如何使用可变成员变量创建不可变类?

时间:2016-10-10 13:25:24

标签: java immutability

假设我有一个Customer类,其中有一个Address Class的引用,我们可以通过使成员变量私有最终等等来制作Customer类的对象....我的问题是这个地址类是可变的getter和setter有它在Customer类中的引用,现在我们如何使Customer类不可变?在客户类中进行此地址引用是否足以使其成为不可变类(客户类的对象不可变)有人可以解释一下吗?

现在在场景中我们如何使Customer类的对象不可变?以及客户和地址之间的关系如何显示在内存中?有人可以回答这个吗?

public final class Customer{
    private final String name;
    private final Address address;

    public Customer(String name, Address address){
        this.name=name;
        this.address= address;
    }

    public String getName(){
        return this.name;
    }

    public String getAddress(){
        return this.name;
    }

}

public class Address{
 private String streetName;
 private Long pincode;

 public void setStreeName(String streetName){
    this.streetName = streetName;
}

 public void setPincode(long pincode){
    this.pincode = pincode;
}

public String getStreetName(){
   return this.streeName;
}

public long getPincode(){
   return this.pincode;
}

}

1 个答案:

答案 0 :(得分:0)

在上面的客户类中,其他数据类型是原始的(不可变的),而Address类则不是,所以在Address引用的getter方法中,我们应该返回一个新的地址对象,其属性类似于客户类中的Address引用。