JavaRush /จาวาบล็อก /Random-TH /10 เคล็ดลับในการเอาชนะเมธอด toString() ใน Java (ตอนที่ 2)...
Ku6ep
ระดับ

10 เคล็ดลับในการเอาชนะเมธอด toString() ใน Java (ตอนที่ 2)

เผยแพร่ในกลุ่ม

ตัวอย่าง toString ใน Java

เราจะใช้คลาสต่อไปนี้เพื่อแสดงตัวอย่าง toString ของเราสำหรับยูทิลิตี้ ToStringBuilder ของ Netbeans, Eclipse และ Apache

/** * Java программа, демонстрирующая How переопределить метод toString() в Java. * Эта Java программа показывает How вы можете использовать IDE типа Netbeans or Eclipse * и открытую библиотеку типа Apache commons ToStringBuilder для * переопределения toString в Java. * @author Javarevisited.blogspot.com */ public class Country { private String name; private String capital; private long population; private Date independenceDay; public Country(String name){ this.name = name; } public String getName(){ return name; } public void setName(String name) {this.name = name;} public String getCapital() {return capital;} public void setCapital(String capital) {this.capital = capital;} public Date getIndependenceDay() {return independenceDay;} public void setIndependenceDay(Date independenceDay) {this.independenceDay = independenceDay;} public long getPopulation() { return population; } public void setPopulation(long population) {this.population = population; } @Override public String toString() { return "Country{" + "capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + '}'; } public void setIndependenceDay(String date) { DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); try { this.independenceDay = format.parse(date); } catch (ParseException ex) { Logger.getLogger(Country.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String args[]) { Country India = new Country("India"); India.setCapital("New Delhi"); India.setIndependenceDay("15/07/1947"); India.setPopulation(1200000000); System.out.println(India); } }

วิธีการ toString ที่สร้างโดย Netbeans IDE


วิธีการ toString ที่สร้างโดย Netbeans IDE สร้างผลลัพธ์ต่อไปนี้สำหรับคลาสที่กำหนดไว้ข้างต้น:

Country{capital=New Delhi, population=1200000000, independenceDay=Fri Aug 15 00:00:00 VET 1947}

หากคุณดูที่เอาต์พุตด้านบน คุณจะเห็นว่า Netbeans ไม่ได้สร้างวันที่ที่จัดรูปแบบให้คุณ แต่กลับเรียกเมธอด toString() ของคลาส java.util.Date

วิธีการ toString() ที่สร้างโดย Rclise IDE


ตามค่าเริ่มต้น Eclipse จะสร้างเมธอด toString ต่อไปนี้:

@Override public String toString() { return "Country [name=" + name + ", capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + "]"; }

คุณสามารถสร้างโค้ดสำหรับเมธอด toString ใน Eclipse ได้โดยคลิกที่ Source --> Generate toString() นอกจากนี้ยังมีความเป็นไปได้หลายอย่าง เช่น การเลือกสไตล์โค้ด นั่นคือ การใช้ตัวถูกดำเนินการการต่อข้อมูลหรือStringBuilderและอื่นๆ ด้านล่างนี้คือผลลัพธ์ของเมธอด toString() ที่เราเพิ่งสร้างใน Eclipse:

Country [name=India, capital=New Delhi, population=1200000000, independenceDay=Tue Jul 15 00:00:00 VET 1947]

การใช้ ToStringBuilder เพื่อแทนที่ toString() วิธีการของ Java

นอกจากคลาสที่มีประโยชน์มากมาย เช่นPropertyUtils , EqualsBuilder หรือ HashCodeBuilder แล้ว Apache ยังมี ToStringBuilder ซึ่งสามารถสร้างโค้ดเพื่อส่งออกเมธอด toString() ในรูปแบบที่แตกต่างกันได้หลากหลาย มาดูกันว่าผลลัพธ์ของเมธอด toString มีลักษณะเป็นอย่างไรในรูปแบบเรียบง่ายและหลายบรรทัด: สไตล์เรียบง่าย:

India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947

สไตล์หลายบรรทัด:

test.Country@f0eed6[
 name=India
 capital=New Delhi
 population=1200000000
 independenceDay=Fri Aug 15 00:00:00 VET 1947
 ]

NO_FIELD_NAMES_STYLE (สไตล์ที่ไม่มีชื่อฟิลด์)

test.Country@1d05c81[India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947]

SHORT_PREFIX_STYLE (รูปแบบคำนำหน้าแบบสั้น)

Country[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

ToStringStyle.DEFAULT_STYLE (สไตล์เริ่มต้น)

test.Country@1d05c81[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

Guavaเป็นไลบรารีโอเพ่นซอร์สที่คล้ายกันจาก Google นอกจากนี้ยังมี API ที่สะดวกสำหรับการสร้างโค้ดสำหรับวิธี toString ใน Java

เมื่อเรียกใช้เมธอด toString ใน Java

toString เป็นวิธีการที่ค่อนข้างเฉพาะเจาะจงและถูกเรียกจากวิธีการ JavaAPI หลายวิธี เช่น println(), printf() , logging, assert คำสั่ง , ดีบักเกอร์ IDE เมื่อพิมพ์คอลเลกชัน และเมื่อเชื่อมต่อกัน หากคลาสย่อยไม่ได้แทนที่ toString() ดังนั้นการใช้งานเริ่มต้นที่กำหนดไว้ในคลาส Object จะถูกเรียก นักพัฒนาจำนวนมากใช้ API การบันทึกเช่น Log4J หรือ java.util.Logger เพื่อส่งออกบันทึกและมักจะพลาด Object ที่นี่

logger.info("Customer not found:" + customer)

และหากลูกค้าไม่แทนที่ toString และส่งออกข้อมูลสำคัญ เช่น customerId, customerName เป็นต้น การวินิจฉัยปัญหาจะค่อนข้างยาก นี่คือเหตุผลว่าทำไมการแทนที่ toString ใน Java จึงคุ้มค่าเสมอ เรามาดูประโยชน์บางประการหากเราทำเช่นนี้

ประโยชน์ของการแทนที่วิธี toString

  1. ตามที่กล่าวไว้ข้างต้น toString ที่ถูกแทนที่อย่างเหมาะสมจะช่วยแก้ไขจุดบกพร่องโดยการพิมพ์ข้อมูลที่สำคัญออกมา
  2. หากวัตถุสำคัญถูกเก็บไว้ในคอลเลกชัน การพิมพ์คอลเลกชันจะเรียกใช้เมธอด toString ของวัตถุที่เก็บไว้ ซึ่งสามารถพิมพ์ข้อมูลสำคัญออกมาได้ ตัวอย่างคลาสสิกอย่างหนึ่งของเมธอด toString ที่ไม่ได้แทนที่คือ Array ใน Java ซึ่งพิมพ์ผลลัพธ์ของการใช้งานเริ่มต้นแทนเนื้อหาของอาร์เรย์ แม้ว่าจะมีหลายวิธีในการพิมพ์เนื้อหาของอาร์เรย์โดยใช้ Arrays.toString() และอื่นๆ แต่เนื่องจาก Array เป็นอ็อบเจ็กต์ Java มันจะดีกว่ามากถ้ามันรู้วิธีพิมพ์เอง เช่นเดียวกับคลาสคอลเลกชันเช่นList หรือ Set

นี่เป็นเพียงประโยชน์บางส่วนที่คุณจะได้รับจากการใช้งานหรือการแทนที่เมธอดtoString ใน Javaมีประโยชน์อีกมากมายที่คุณจะได้รับและเรียนรู้ด้วยตนเอง ฉันหวังว่าเคล็ดลับเหล่านี้จะช่วยให้คุณได้รับประโยชน์สูงสุดจากการใช้งาน toString แจ้งให้เราทราบหากคุณทราบวิธีการพิเศษในการทำงานกับ toString ที่ช่วยเหลือคุณในแอปพลิเคชัน Java ของคุณ

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION