連接地址:http://www.xx566.com/detail/128.html
html
Java中的Object類是全部Java類的超類(也就是祖先),全部對象都實現Object類中的方法,在平常的工做中,咱們常常須要重寫其中的幾個 方法, 如:equals、toString、hashCode等方法,而在工做中,咱們實現這些方法有時候也比較痛苦,如equals方法判斷非空、 toString調試信息不完整等等,在Guava中,其提供了Objects類幫助咱們簡化了這些經常使用方法的實現,接下來,咱們一塊兒來學習一下。java
首先,咱們翻看它的源碼,其中包含了幾個重要的方法,如:equal,hasCode,firstNonNull,toStringHelper等, 咱們依次進行介紹。工具
equal:做用與Object.equals方法相同,用於判斷兩個對象是否相等,不管對象是否爲空,在對象爲null時,避免了拋出NullPointerException。學習
hasCode:做用與Object.hasCode方法相同,用於產生對象的hasCode值,通常在工做中,覆蓋equals方法時也要覆蓋hasCode方法,判斷兩個對象徹底相同時,對象的equals和hasCode均須要爲真。this
firstNonNull:傳入兩個參數,返回兩個參數中不爲空的那個,若是兩者都不爲空,返回第一個參數。google
toStringHelper:用於返回一個ToStringHelper對象。指針
ToStringHelper:是Objects的靜態內部類,做用是動態的添加輸出信息,用於toString方法的調試,其中 add(String name, Object value)方法用於添加一組鍵值輸出;addValue(Object value)用於添加一個未命名的值輸出,不過guava建議使用add方法爲value指定一個name;omitNullValues用於配置 ToStringHelper,在toString的時候忽略爲null的屬性。調試
接下來,咱們來看下面的代碼,其中簡單的對以上的方法作了應用,代碼以下:code
package guava; import com.google.common.base.Objects; import org.junit.Test; /** * Objects:Object方法工具類 * User: Realfighter * Date: 2014/8/20 * Time: 9:42 */ public class ObjectsTest { //打印方法 private static void print(Object obj) { System.out.println(String.valueOf(obj)); } @Test public void testObjects() { //equal方法:用於判斷兩個對象是否相等,避免空指針 Objects.equal(null, 123);//false Objects.equal(123, 123);//true Objects.equal(123, null);//false Objects.equal(null, null);//true //hashCode方法:獲取對傳入的字段作哈希運算後產生的hashCode值 //判斷兩個對象徹底相同時,除了equals爲真,hashCode也須要相同 //firstNonNull:傳入兩個參數,返回兩個參數中不爲空的那個,若是兩者都不爲空,返回第一個參數。 print(Objects.firstNonNull(null,"you are null"));//this is null print(Objects.firstNonNull("i am not null","you are null"));//i am not null print(Objects.firstNonNull(null,null));//NullPointerException //toStringHelper方法:用於輕鬆愉快的編寫toString方法 print(Objects.toStringHelper(this) .add("name", "Realfighter") .add("age", null) //註釋omitNullValues後輸出:ObjectsTest{name=Realfighter, age=null} .omitNullValues() .toString()); //ObjectsTest{name=Realfighter} } }