1 重點關注
2 課程內容
3 代碼演練
3.1 核心代碼 覆蓋toString方法
/** * %d 整數類型(十進制) * %03d 如果小於3位,前方補0 * * 按照指定格式打印 * * @author weidoudou * @date 2022/7/7 8:29 * @param * @return java.lang.String **/ @Override public String toString(){ return String.format("(%03d) %03d-%04d",areaCode,prefix,lineNumber); }
3.2 反例 未覆蓋toString方法
實例:
package com.ddwei.test.core.chapter10.demo1; import java.util.HashMap; import java.util.Map; public final class PhoneNumber { private final short areaCode; private final short prefix; private final short lineNumber; public PhoneNumber(short areaCode, short prefix, short lineNumber) { rangeCheck(areaCode, 999, "area code"); rangeCheck(prefix, 999, "prefix"); rangeCheck(lineNumber, 9999, "line number"); this.areaCode = (short)areaCode; this.prefix = (short)prefix; this.lineNumber = (short)lineNumber; } private static void rangeCheck(int arg,int max,String name) { if(arg < 0 || arg > max) throw new IllegalArgumentException(name +": "+ arg); } @Override public boolean equals(Object obj) { //1、使用==操作符檢查“參數是否爲這個對象的引用” if(obj == this) return true; //2、使用instanceof操作符檢查“參數是否爲正確的類型” if(!(obj instanceof PhoneNumber)) return false; //3、把參數轉化成正確的類型 PhoneNumber pn = (PhoneNumber)obj; //4、對於該類的每個“關鍵”域,檢查參數中的域是否與該對象中對應的域相匹配(其實就是比較兩個對象的值是否相等了) return pn.lineNumber == lineNumber && pn.prefix == prefix && pn.areaCode == areaCode; } public static void main(String[] args) { short s1 = 707; short s2 = 867; short s3 = 5309; PhoneNumber phoneNumber = new PhoneNumber(s1,s2,s3); System.out.println(phoneNumber.toString()); } }
測試結果:
com.ddwei.test.core.chapter10.demo1.PhoneNumber@7699a589
Process finished with exit code 0
3.3 正例 覆蓋toString方法
實例:
package com.ddwei.test.core.chapter10.demo2; public final class PhoneNumber { private final short areaCode; private final short prefix; private final short lineNumber; public PhoneNumber(short areaCode, short prefix, short lineNumber) { rangeCheck(areaCode, 999, "area code"); rangeCheck(prefix, 999, "prefix"); rangeCheck(lineNumber, 9999, "line number"); this.areaCode = (short)areaCode; this.prefix = (short)prefix; this.lineNumber = (short)lineNumber; } private static void rangeCheck(int arg,int max,String name) { if(arg < 0 || arg > max) throw new IllegalArgumentException(name +": "+ arg); } @Override public boolean equals(Object obj) { //1、使用==操作符檢查“參數是否爲這個對象的引用” if(obj == this) return true; //2、使用instanceof操作符檢查“參數是否爲正確的類型” if(!(obj instanceof PhoneNumber)) return false; //3、把參數轉化成正確的類型 PhoneNumber pn = (PhoneNumber)obj; //4、對於該類的每個“關鍵”域,檢查參數中的域是否與該對象中對應的域相匹配(其實就是比較兩個對象的值是否相等了) return pn.lineNumber == lineNumber && pn.prefix == prefix && pn.areaCode == areaCode; } /** * %d 整數類型(十進制) * %03d 如果小於3位,前方補0 * * 按照指定格式打印 * * @author weidoudou * @date 2022/7/7 8:29 * @param * @return java.lang.String **/ @Override public String toString(){ return String.format("(%03d) %03d-%04d",areaCode,prefix,lineNumber); } public static void main(String[] args) { short s1 = 007; short s2 = 867; short s3 = 5309; PhoneNumber phoneNumber = new PhoneNumber(s1,s2,s3); System.out.println(phoneNumber.toString()); } }
測試結果:
(007) 867-5309
Process finished with exit code 0