CodeGym /בלוג Java /Random-HE /שיטת Java toString()
John Squirrels
רָמָה
San Francisco

שיטת Java toString()

פורסם בקבוצה
לעתים קרובות למדי בעת יצירת תוכנית, יש צורך לברר את התוכן של אובייקט. למטרות אלו, מחלקת Java Object , מחלקת Java הבסיסית ביותר בהיררכיית המחלקות, מגדירה שיטת toString() מיוחדת . זה מחזיר מחרוזת תווים שמתארת ​​את האובייקט. יישום ברירת המחדל של שיטת toString() ב-Java מייצר פלט כך:
package.class@hashCode
כלומר toString , שהוגדר ב- java.lang.Object נותן את קוד ה-hash של האובייקט בצורה הקסדצימלית. לעתים קרובות זה לא מאוד ברור ושימושי. אז כשיוצרים מחלקה חדשה, נהוג לעקוף את toString() כך שמחרוזת ההחזרה תכיל את שם המחלקה, השמות והערכים של כל המשתנים. עקיפה נכונה של שיטת toString יכולה לעזור ברישום וניפוי באגים של תוכנית Java, היא מספקת מידע בעל ערך וחשוב. במילים פשוטות, שיטת toString() משמשת ב-Java כדי לקבל אובייקט מחרוזת המייצג את הערך של אובייקט מספרי. במילים אחרות, הוא ממיר מספר למחרוזת. אם השיטה לוקחת סוג נתונים פשוט כארגומנט, מוחזר אובייקט מחרוזת המייצג את הערך של סוג הנתונים הפשוט.

דוגמה לשיטת Java toString()‎

בדרך כלל אם אתה יוצר מחלקה, בנוסף למתודה toString() ב-Java אתה צריך לעקוף את המתודות equals , hashCode ו- compareTo כדי לדעת איך לעבוד עם האובייקטים שלה. אבל לעת עתה, בואו נתמקד ב- toString . ברוב המקרים, שליחת מידע טקסטואלי על אובייקט היא פשוטה למדי. אתה רק צריך להבין מה בדיוק המשתמש היה רוצה לראות בעת רישום. בוא ניתן דוגמה וניצור מחלקה שמתארת ​​נקודה במישור. יש לו שתי קואורדינטות: coordinateX, coordinateY. באופן טבעי, הם צריכים להיות מוצגים על המסך אם משתמש שואל "איזה אובייקט זה" בדיוק כמו שם המחלקה עצמה. זה מה שאנחנו הולכים להדגים בשיטת ה-toString() המוחלף . כעת אנו יוצרים את המחלקה עצמה, השדות שלה (קואורדינטות), בנאי, גטרים להשגת קואורדינטות (בטח, אפשר לא ליצור אותן, אבל מנקודת המבט של שימוש נכון ב-OOP, גטרים הם תרגול טוב). רק לשם המחשה, בואו גם ניצור שיטה שיוצרת נקודה חדשה - סכום השתיים האחרות, וגם נעקוף מתודות equals ו- 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() פשוט העבירו את האובייקט הרצוי אל 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
כאן יש לנו את קוד ה-hash של האובייקט בהקסדצימלי.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION