创建Java不可变类
不可变(immutable)类的意思是创建该类的实例后,该实例的Field是不可改变的,Java提供的8个包装类和java.lang.String类都是不可变类。
如果需要创建自定义的不可变类,可遵守如下规则:
- 使用private和final修饰符来修饰该类的Field。
- 提供带参数构造器,用于根据传入参数来初始化类里的Field。
- 仅为该类的Field提供getter方法,不要为该类的Field提供setter方法,因为普通方法无法修改final修饰的Field。
- 如果有必要,重写Object类的hashCode和equals方法。equals方法以关键Field来作为判断两个对象是否相等的标准,除此之外,还应该保证两个用equals方法判断为相等的对象的hashCode也相等。
1 public class AddressTest { 2 3 } 4 5 class Address { 6 private final String detail; 7 private final String postcode; 8 9 public Address() { 10 this.detail = ""; 11 this.postcode = ""; 12 } 13 14 public Address(String detail, String postcode) { 15 this.detail = detail; 16 this.postcode = postcode; 17 } 18 19 //仅提供两个getter方法 20 public String getDetail() { 21 return this.detail; 22 } 23 public String getPostcode() { 24 return this.postcode; 25 } 26 27 //重写equals方法,判断两个对象是否相等 28 public boolean equals(Object obj) { 29 ...... 30 } 31 32 public int hashCode() { 33 return detail.hashCode() + postcode.hashCode() * 31; 34 } 35 36 }