10 עצות לעקוף את שיטת toString() ב-Java - ToStringBuilder Netbeans Eclipse
שיטת Java toString
toString
השיטה ב-Java משמשת כדי לספק מידע ברור ומספיק על אובייקט ( Object
) בצורה הניתנת לקריאה על ידי אדם. עקיפה נכונה של שיטה toString
יכולה לעזור ברישום וניפוי באגים של תוכנית Java על ידי מתן מידע בעל ערך וחשוב. מכיוון toString()
שהיא מוגדרת במחלקה java.lang.Object
ויישום ברירת המחדל שלה אינו מספק מידע רב, עדיף תמיד לעקוף שיטה זו במחלקה צאצאית. למעשה, אם אתה יוצר מחלקה חשובה או כללית של סוג Order
, Trade
או Employee
, תעקוף תמיד שווה , hashCode , compareTo ושיטות toString
ב-Java. כברירת מחדל המימוש toString
מייצר פלט בצורה , package.class@hashCode
למשל לדוגמא שלנו שיטת המחלקה תדפיס test.Country@18e2b22 כאשר 18e2b22 הוא קוד ה-hash של האובייקט בהקסדצימלי, אם תקרא לשיטת hashCode זה יחזיר 260943370 שהוא ה- מקבילה עשרונית של 18e2b22. מידע זה אינו שימושי במיוחד בעת חיפוש בעיה. בוא נסתכל על דוגמה מהחיים האמיתיים שבה אתה צריך למצוא בעיה בחיבור הרשת שלך, במקרה שאתה רוצה לדעת לאיזה מארח ויציאה המערכת שלך מנסה להתחבר ואם או רק תדפיס את מידע ברירת המחדל, זה יהיה בלתי אפשרי לדמיין את הבעיה האמיתית, אבל עם יישום מוחלף הם יכולים לספק מידע שימושי כגון שם מארח ומספר יציאה. במדריך זה של ג'אווה אנו נותנים כמה טיפים על דריסת שיטה עם דוגמאות קוד. toString()
toString()
Country
Socket
ServerSocket
toString
toString
toString
כיצד לעקוף את שיטת toString ב-Java:
הדפס את התאריך המעוצב (כלומר יום/חודש/שנה) במקום הערך הגולמי. זהו רמז שימושי מאוד בעת עקיפת שיטת JavatoString
. toString()
המחלקה הרגילה java.util.Date
לא מוציאה תאריך מעוצב וכוללת הרבה פרטים שלא תמיד יש צורך בהם. אם אתה משתמש ב-DateFormat חלקי , כלומר. dd-MM-yy ביישום שלך, אז אתה בהחלט רוצה לראות את הפורמט הזה במקום את ברירת המחדל. ה-IDE בדרך כלל לא מייצר פלט מעוצב Date
וזה משהו שתצטרכו לעשות בעצמכם, אבל זה שווה את זה. קרא כיצד להדפיס תאריך בפורמט ddMMyy ב-Java לפרטים על עיצוב Date
ב-Java. אתה יכול גם להשתמש במחלקה SimpleDataFormat או בספריית Joda Date זמן בשביל זה.
תיעוד פורמט toString
אם השיטה שלךtoString()
לא מפלטת נתונים כשדה=ערך, אז כדאי לתעד את פורמט הפלט toString
, במיוחד עבור אובייקטים חשובים כמו Employee או Student. לדוגמה, אם שיטת toString()
מחלקה Работник(Employee)
מדפיסה את " John-101-Sales-9846387321 " אז נוהג טוב יהיה לציין את הפורמט כ-"name-id-department-contact", אך באותו הזמן לא לאפשר ללקוח לקבל מידע מהשיטה toString()
, עליך לספק תמיד שיטות מתאימות לאחזור נתונים, כגון getName()
, getId()
, getContact()
וכן הלאה, מכיוון שמידע המתקבל toString()
מיצוג אובייקט הוא שביר ונוטה לשגיאות, כך שללקוח חייב להיות תמיד נתיב נקי להשגת מידע.
השתמש ב-StringBuilder כדי להרכיב את הפלט של toString()
אם אתה כותב קוד עבור שיטהtoString()
ב-Java, השתמש ב-StringBuilder כדי להוסיף תכונות בודדות. אם אתה משתמש ב-IDE כמו Eclipse , Netbeans או IntelliJ אז השימוש StringBuilder
ב-and append()
במקום באופרטור + לחיבור toString
היא גם הדרך ללכת. כברירת מחדל, גם Eclipse וגם Netbeans יוצרים toString
עם אופרטור השרשור.
שימוש בהערה @Override
שימוש@Override
בעקוף שיטות ב-Java הוא אחת השיטות המומלצות בשפה. אבל הרמז הזה אינו חשוב כמו שהוא יהיה במקרה של דריסה של שיטות equals()
ו compareTo()
, שכן עומס יתר במקום דריסה יכול ליצור שגיאות עדינות יותר שקשה לחישוב. בכל מקרה, עדיף להשתמש בהערה @Overrride
.
הדפסת התוכן של מערך במקום הדפסת אובייקט המערך
מערך הוא אובייקט ב-Java אך הוא אינו עוקף שיטהtoString
וכאשר אתה מדפיס מערך פורמט הפלט המוגדר כברירת מחדל אינו שימושי במיוחד מכיוון שהיינו רוצים לראות את התוכן של המערך. אגב, זו סיבה נוספת לכך שמערך char[] עדיף על פני String לאחסון נתונים רגישים כמו סיסמה. הקדישו זמן לבחון האם הדפסת התוכן של מערך עוזרת ללקוחות שלכם או לא, ואם זה הגיוני, אז הדפיסו את התוכן של המערך במקום האובייקט עצמו. מטעמי ביצועים, עדיף להשתמש Collection
בכזה ArrayList
או ב-HashSet במקום Array
לאחסון אובייקטים אחרים.
טיפים לבונוס
עוד כמה עצות בונוס על דריסת שיטהtoString
ב-Java.
-
הדפס פלט
toString
במספר שורות או בשורות אחת בהתאם לאורכו. -
כלול שמות כיתות מלאים בייצוג
toString
, במילים אחרותpackage.class
כדי למנוע אי הבנה. -
אתה יכול לדלג על ערכי null או להציג אותם, אבל עדיף להציג אותם. לפעמים הם שימושיים מכיוון שהם מראים איזה שדה קיים
null
במהלך אירוע כלשהו, למשל NullPointerException . -
השתמש בפורמט מפתח-ערך, לדוגמה
member.name=member.value
, רוב ה-IDEs תומכים בכך. -
כלול חברים שעברו בירושה אם אתה חושב שהם צריכים לספק מידע הכרחי לכיתה היורשת.
-
לפעמים אובייקט מכיל פרמטרים אופציונליים ונדרשים רבים, כפי שהראינו בדוגמה שלנו לתבנית Builder , כאשר כמעט בלתי אפשרי להדפיס את כל השדות, במקרה זה נוכל להדפיס רק את השדות הנדרשים, במיוחד שיש לנו שדות אופציונליים.
GO TO FULL VERSION