创建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 }


 

原文地址:https://www.cnblogs.com/bluepoint2009/p/Java-immutable-class.html