疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

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