CodeGym /จาวาบล็อก /สุ่ม /วิธีการ Java toString()
John Squirrels
ระดับ
San Francisco

วิธีการ Java toString()

เผยแพร่ในกลุ่ม
บ่อยครั้งในขณะที่สร้างโปรแกรม จำเป็นต้องค้นหาเนื้อหาของอ็อบเจ็กต์ เพื่อวัตถุประสงค์เหล่านี้ คลาส Java Objectซึ่งเป็นคลาส Java พื้นฐานที่สุดในลำดับชั้นของคลาส จะกำหนดเมธอดtoString() พิเศษ ส่งคืนสตริงอักขระที่อธิบายวัตถุ การใช้งานเริ่มต้นของ วิธีการ toString()ใน Java จะสร้างผลลัพธ์ดังนี้:
package.class@hashCode
เช่นtoStringที่กำหนดไว้ในjava.lang.Objectให้รหัสแฮชของวัตถุในรูปแบบเลขฐานสิบหก ซึ่งมักจะไม่ชัดเจนและมีประโยชน์มากนัก ดังนั้นเมื่อสร้างคลาสใหม่ เป็นเรื่องปกติที่จะแทนที่toString()เพื่อให้สตริงที่ส่งคืนประกอบด้วยชื่อคลาส ชื่อ และค่าของตัวแปรทั้งหมด การ แทนที่เมธอดtoStringอย่างถูกต้องสามารถช่วยในการบันทึกและการดีบักโปรแกรม Java ได้ โดยให้ข้อมูลที่มีคุณค่าและสำคัญ พูดง่ายๆ ก็คือ มีการใช้เมธอด toString()ใน Java เพื่อรับอ็อบเจ็กต์สตริงที่แสดงถึงค่าของอ็อบเจ็กต์ตัวเลข กล่าวอีกนัยหนึ่ง มันจะแปลงตัวเลขเป็นสตริง ถ้าวิธีการใช้ชนิดข้อมูลแบบธรรมดาเป็นอาร์กิวเมนต์ วัตถุสตริงจะถูกส่งกลับซึ่งแสดงถึงค่าของชนิดข้อมูลแบบธรรมดา

ตัวอย่างของวิธีการ Java toString()

โดยปกติแล้ว หากคุณสร้างคลาส นอกเหนือจากเมธอดtoString()ใน Java แล้ว คุณต้องแทนที่เมธอดเท่ากับ , hashCodeและcomparisonToเพื่อที่จะทราบวิธีทำงานกับอ็อบเจ็กต์ของมัน แต่สำหรับตอน นี้มาเน้นที่toString ในกรณีส่วนใหญ่ การส่งข้อมูลที่เป็นข้อความเกี่ยวกับวัตถุนั้นค่อนข้างง่าย คุณเพียงแค่ต้องเข้าใจว่าผู้ใช้ต้องการเห็นอะไรเมื่อทำการบันทึก ลองยกตัวอย่างและสร้างคลาสที่อธิบายจุดบนระนาบ มีพิกัด 2 แห่ง: CoordinatX, CoordinatY โดยปกติแล้ว ควรปรากฏบนหน้าจอหากผู้ใช้ถามว่า "นี่คือวัตถุอะไร" เช่นเดียวกับชื่อของคลาสเอง นี่คือสิ่งที่เรากำลังจะสาธิตในเมธอดtoString() ที่ถูกแทนที่ ตอนนี้เราสร้างคลาสเอง ฟิลด์ของมัน (พิกัด) ตัวสร้าง ตัวรับเพื่อรับพิกัด (แน่นอนว่าเป็นไปไม่ได้ที่จะสร้างมันขึ้นมา แต่จากมุมมองของการใช้ OOP ที่ถูกต้อง ตัวรับเป็นแนวปฏิบัติที่ดี) เพื่อให้เห็นภาพ เรามาสร้างวิธีการที่สร้างจุดใหม่ด้วยผลรวมของอีกสองวิธี และยังแทนที่วิธี เท่ากับและ hashCode ด้วย
public class Point implements Comparable<Point> {
   private final int coordinateX;
   private final int coordinateY;

   public Point(final int coordinateX, final int coordinateY) {
       this.coordinateX = coordinateX;
       this.coordinateY = coordinateY;
   }

   public int getX() {
       return coordinateX;
   }

   public int getY() {
       return coordinateY;
   }

   public Point sum(final Point that) {
       return new Point(coordinateX + that.coordinateX, coordinateY + that.coordinateY);
   }

// here we override toString with coordinates and class name
   @Override
   public String toString() {
       return "Point{"
               + "X: " + getX()
               + ", Y: " + getY()
               +  '}';
   }

   @Override
   public boolean equals(Object o) {
       if (o == this) {
           return true;
       }
       if (o == null || o.getClass() != this.getClass()) {
           return false;
       }

   @Override
   public int hashCode() {
       return coordinateX + coordinateY;

   }
ตอนนี้เรามาสร้างคลาสการทดสอบและวิธีการหลักกันดีกว่า ตรงนี้เรามีสองแต้มและอันที่สาม เราได้มาจากผลรวมของสองแต้ม เราใช้ วิธี toStringกับจุดนี้และพิมพ์ออกมา
//toString() method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
     //call toString explicitly
       System.out.println(mySum.toString());
   }
}
ผลลัพธ์ของการทำงานของโปรแกรมนี้มีดังนี้:
จุด{X: 3, Y: 15}
คุณไม่จำเป็นต้องเรียกใช้ เมธอด toString อย่างชัดเจน และโดยส่วนใหญ่แล้วคุณไม่จำเป็นต้องเรียกใช้เมธอด toString หากต้องการเรียกใช้ เมธอด toString()เพียงส่งอ็อบเจ็กต์ที่ต้องการไปที่System.out.println ดังนั้นคลาสทดสอบของเราจะมีลักษณะดังนี้:
//toString method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
       //call toString implicitly
       System.out.println(mySum);
   }
}
ผลลัพธ์ของโปรแกรมก็เหมือนเดิม จะเกิดอะไรขึ้นถ้าเราไม่แทนที่เมธอดtoStringแต่ต้องการพิมพ์ออบเจ็กต์ล่ะ ในกรณีนี้ วิธีการ toStringของ คลาส Objectจะถูกเรียก ในตัวอย่างของเรา ถ้าเราลบ เมธอด toString ออก จาก คลาส Pointและปล่อยให้ทุกอย่างเหมือนกับที่อยู่ในคลาสทดสอบ เราจะได้ผลลัพธ์ดังต่อไปนี้:
จุด@12
ที่นี่เรามีรหัสแฮชของวัตถุเป็นเลขฐานสิบหก
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION