zoukankan      html  css  js  c++  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 }


     

  • 相关阅读:
    struts2_文件上传和下载
    struts2_方法拦截器
    struts2_Action之间的重定向传参
    struts2_全局的拦截器,拦截用户非法登陆
    Hibernate入门心得
    struts2_异常页面处理
    设计师小法器:字体大管家
    IE6,IE7下设置body{overflow:hidden;}失效Bug【转】
    子层的margintop属性应用到父层上的解决方法
    jQuery CSS选择器nthchild
  • 原文地址:https://www.cnblogs.com/bluepoint2009/p/Java-immutable-class.html
Copyright © 2011-2022 走看看