免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
EqualsBuilder和HashCodeBuilder
自動化hashCode()和equals()   問題產(chǎn)生:當需要自動實現(xiàn)hashCode()和equals()方法   解決方法:使用EqualsBuilder和HashCodeBuilder   使用舉例:  
import
 org.apache.commons.lang.builder.HashCodeBuilder;

import
 org.apache.commons.lang.builder.EqualsBuilder;
 
public   class  PoliticalCandidate 
{
    
//
 Member variables - omitted for brevity
    
//
 Constructors - omitted for brevity
    
//
 get/set methods - omitted for brevity
    
//  A hashCode which creates a hash from the two unique identifiers

 
public   int  hashCode( ) 

         
 return   new  HashCodeBuilder( 17 37
) .append(firstName)
                        .append(lastName).toHashCode( );
    }
   
 
//  An equals which compares two unique identifiers
 
               
         public   boolean  equals(Object o) 
{
        
 
             boolean  equals  =   false ;
        
 
            if  ( o  !=   null   && PoliticalCandidate. class .isAssignableFrom(o) ) 
{
 
            PoliticalCandidate pc 
=
 (PoliticalCandidate) o;
            
               equals 
=  ( new
 EqualsBuilder( ) .append(firstName, ps.firstName)   
                                  .append(lastName, ps.lastName)).isEquals( );
       
              }
        
   
             return  equals;
    
       }

}
Discussion: 1.在上述例子中,當有相同的firstname和lastname時,認為兩個對象的hashCode相同,從而equals()返回true. 如果hashCode取決于該class的所有filed時需要使用反射機制來產(chǎn)生一個hashCode。
public   int  hashCode( ) 
{
    
return  HashCodeBuilder.reflectionHashCode( this
);
}
和ToStringBuilder 與 HashCodeBuilder一樣EqualsBuilder 也是使用append()方法進行配置, EqualsBuilder的append()方法可以接受基本類型、對象、數(shù)組作為參數(shù)。EqualsBuilder強大的地方在于可以直接把數(shù)組作為參數(shù)傳入append()方法,EqualsBuilder會依次比較數(shù)組中的每個元素。 2.如果兩個對象相等當且僅當每個屬性值都相等 這句話可以由以下代碼實現(xiàn):
public   boolean  equals(Object o) 
{
    
return  EqualsBuilder.reflectionEquals( this
, o);
}

問題提出:需要快速實現(xiàn)compareTo()方法解決方法:使用CompareToBuilder提供的compareTo()方法。同樣的CompareToBuilder也使用了反射機制。以下代碼提供了一個compareTo()方法,用于比較兩個對象所有的非static和非transient成員變量。

import  org.apache.commons.lang.builder.CompareToBuilder;
//  Build a compareTo function from reflection 
public   int  compareTo(Object o) 
{
    
return  CompareToBuilder.reflectionCompare( this , obj);
}
Discussion: CompareToBuilder.reflectionCompare ()提供了兩個對象non-static和nontransient成員變量的方法。 reflectionCompare()方法不予理會static和transient變量,因此以下代碼中的averageAge和fullName變量是不會進入比較表達式的。
public   class  PoliticalCandidate 
{
    

                //  Static variable
    
 
                private   static  String averageAge;
    

               //  Member variables 
    
 
               private  String firstName;
    

               private
 String lastName;
    

               private   transient
 String fullName;
    

              //
 Constructors
    
 
             //  get/set methods
    
 
            //  Build a compareTo function from reflection 
 
    
              public   int  compareTo(Object o) 
{
        

                  return  CompareToBuilder.reflectionCompare( this
, obj);
   
              }

 
}
比較對象成員變量的時候應該有一個比較的次序存在,上述代碼中默認的應該是先比較lastName,然后是firstName。調(diào)用append()方法可以把要比較的變量加入比較表達式中,并且遵循后加入的先比較的次序。例如:
public   int  compareTo(Object o) 
{
    

                 int  compare  =   - 1 //  By default return less-than
    
  
                 if ( o  !=   null   &&  PoliticalCandidate. class .isAssignableFrom( o.getClass( ) ) ) 
{
 
            PoliticalCandidate pc 
=
 (PoliticalCandidate) o;
            
                     compare 
=  ( new
 CompareToBuilder( )   .append(firstName, pc.firstName)
                                           .append(lastName, pc.lastName)).toComparison( );
   
                  }
    
           
                  return  compare;

         }
在比較的時候會先比較lastName,只有在lastName相同的情況下才會比較firstName。 ps:實現(xiàn)compareTo()的時候應保證和equals()規(guī)則相同,即當compareTo()返回是0的時候equals()應該返回true。

1.1 ReflectionToStringBuilder

本筆記是在閱讀Jakarta Commons Cookbook時所留下的。 1.使用ReflectionToStringBuilder 或者ToStringBuilder 自動產(chǎn)生toString()的內(nèi)容。    使用舉例:假設有一個表征校長候選人信息的javabean-PoliticalCandidate。   
public class PoliticalCandidate 
{
    
 
             private String lastName;
   
             
private String firstName;
   
             
private Date dateOfBirth;
   
            
private BigDecimal moneyRaised;
    
 
             private State homeState;
    
 
             // get/set方法省略
  
      
public void toString( ) 
{
 
        ReflectionToStringBuilder.toString( 
this );
    
       }
 
}
該bean里面有個toString()方法,假設有以下操作:
// Create a State
 
   State va = new State( "VA""Virginia");
 
   // Create a Birth Date
 
   Calendar calendar = new GregorianCalendar( );

   calendar.set( Calendar.YEAR, 
1743 );

   calendar.set( Calendar.MONTH, Calendar.APRIL );

   calendar.set( Calendar.DAY_OF_MONTH, 
13 );

   Date dob 
= calendar.getTime( );

   BigDecimal moneyRaised 
= new BigDecimal( 293829292.93 );        
 
// Create a Political Candidate
 
   PoliticalCandidate candidate = 
    
new PoliticalCandidate( "Jefferson""Thomas", dob, moneyRaised, va );
     

   System.out.println( candidate );
假設State對象也是一個使用ReflectionToStringBuilder的javabean,
上述程序一種可能的輸出為
com.discursive.jccook.lang.builders.PoliticalCandidate@187aeca    
[lastName=Jefferson,\firstName=Thomas,dateOfBirth=Sat Apr 13 22:38:42 CST 1743,moneyRaised=\293829292.930000007152557373046875,      state=\com.discursive.jccook.lang.builders.State@87816d  [abbreviation=VA,name=Virginia]]

 

org.apache.commons.lang.builder   
CompareToBuilder – 用于輔助實現(xiàn)Comparable.compareTo(Object)方法;    
EqualsBuilder – 用于輔助實現(xiàn)Object.equals()方法;    
HashCodeBuilder – 用于輔助實現(xiàn)Object.hashCode()方法;    
ToStringBuilder – 用于輔助實現(xiàn)Object.toString()方法;    
ReflectionToStringBuilder – 使用反射機制輔助實現(xiàn)Object.toString()方法;    
ToStringStyle – 輔助ToStringBuilder控制輸出格式;    
StandardToStringStyle – 輔助ToStringBuilder控制標準格式。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java習慣用法總結(jié)
C#中奇妙的操作符重載 - 永不言拜 - 博客園
Java集合和數(shù)組的排序方式總結(jié) – 碼農(nóng)網(wǎng)
Java 8 HashMap鍵與Comparable接口
可變類與不可變類的區(qū)別
Java 中正確使用 hashCode 和 equals 方法
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服