צור חריג מותאם אישית ב- Java

1. הקדמה

במדריך זה נעסוק כיצד ליצור חריג מותאם אישית ב- Java.

אנו נראה כיצד מיושמים חריגים המוגדרים על ידי המשתמש ומשמשים עבור חריגים מסומנים ולא מסומנים.

2. הצורך בחריגים מותאמים אישית

חריגים בג'אווה מכסים כמעט את כל החריגים הכלליים שקשורים בתכנות.

עם זאת, לעיתים אנו זקוקים להשלמת חריגים סטנדרטיים אלה בעצמנו.

הסיבות העיקריות להכנסת חריגים מותאמים אישית הן:

  • חריגים של לוגיקה עסקית - חריגים ספציפיים ללוגיקה העסקית ולזרימת העבודה. אלה עוזרים למשתמשי היישומים או למפתחים להבין מה הבעיה המדויקת
  • לתפוס ולספק טיפול ספציפי לקבוצת משנה של חריגות Java קיימות

ניתן לבדוק ולבטל חריגות של Java. בחלקים הבאים נעסוק בשני המקרים הללו.

3. חריג מסומן בהתאמה אישית

חריגים מסומנים הם חריגים שיש לטפל בהם במפורש.

בואו ניקח בחשבון קטע קוד שמחזיר את השורה הראשונה של הקובץ:

נסה (קובץ סורק = סורק חדש (קובץ חדש (קובץ שם))) {אם (file.hasNextLine ()) להחזיר file.nextLine (); } לתפוס (FileNotFoundException e) {// רישום וכו '} 

הקוד לעיל הוא דרך קלאסית לטיפול בחריגים שנבדקו ב- Java. בזמן שהקוד זורק FileNotFoundException, לא ברור מה הסיבה המדויקת - האם הקובץ אינו קיים או ששם הקובץ אינו חוקי.

כדי ליצור חריג מותאם אישית, עלינו להאריך את ה- java.lang. חריג מעמד.

בואו נראה דוגמה לכך על ידי יצירת חריג מסומן מותאם אישית שנקרא IncorrectFileNameException:

מחלקה ציבורית IncorrectFileNameException מרחיב חריג {public IncorrectFileNameException (מחרוזת errorMessage) {super (errorMessage); }} 

שימו לב שעלינו לספק גם קונסטרוקטור שלוקח a חוּט כהודעת השגיאה והתקשר לבנאי הכיתה ההורה.

זה כל מה שאנחנו צריכים לעשות כדי להגדיר חריג מותאם אישית.

לאחר מכן, בואו נראה כיצד נוכל להשתמש בחריג המותאם אישית בדוגמה שלנו:

נסה (קובץ סורק = סורק חדש (קובץ חדש (fileName))) {אם (file.hasNextLine ()) להחזיר file.nextLine (); } לתפוס (FileNotFoundException e) {if (! isCorrectFileName (fileName)) {throw new IncorrectFileNameException ("שם קובץ שגוי:" + fileName); } // ...} 

יצרנו והשתמשנו בחריג מותאם אישית, כך שהמשתמש יכול כעת לדעת מהו החריג המדויק. האם זה מספיק? אנו כתוצאה מכך לאבד את שורש הסיבה לחריג.

כדי לתקן זאת, אנו יכולים להוסיף גם java.lang. ניתן לזרוק פרמטר לבנאי. בדרך זו נוכל להעביר את חריג השורש לשיחת השיטה:

ציבורי IncorrectFileNameException (מחרוזת errorMessage, Thrableable err) {super (errorMessage, err); } 

עכשיו ה IncorrectFileNameException משמש יחד עם הסיבה הבסיסית לחריג כך:

נסה (קובץ סורק = סורק חדש (קובץ חדש (fileName))) {אם (file.hasNextLine ()) {return file.nextLine (); }} לתפוס (FileNotFoundException שגיאה) {אם (! isCorrectFileName (fileName)) {לזרוק IncorrectFileNameException חדש ("שם קובץ שגוי:" + שם קובץ, שגיאה); } // ...} 

כך אנו יכולים להשתמש בחריגים מותאמים אישית מבלי לאבד את שורש הסיבה שממנה הם התרחשו.

4. חריג מותאם אישית שאינו מסומן

באותה דוגמה, נניח כי אנו זקוקים לחריג מותאם אישית אם שם הקובץ אינו מכיל סיומת כלשהי.

במקרה זה, נצטרך חריג מותאם אישית שאינו מסומן בדומה לקודם, מכיוון ששגיאה זו תתגלה רק בזמן הריצה.

כדי ליצור חריג מותאם אישית שאינו מסומן עלינו להרחיב את java.lang.RuntimeException מעמד:

מחלקה ציבורית IncorrectFileExtensionException מרחיב RuntimeException {public IncorrectFileExtensionException (מחרוזת errorMessage, Throwsable err) {super (errorMessage, err); }} 

לפיכך, אנו יכולים להשתמש בחריג זה שאינו מסומן בהתאמה אישית בדוגמה שלנו:

נסה (קובץ סורק = סורק חדש (קובץ חדש (fileName))) {אם (file.hasNextLine ()) {return file.nextLine (); } אחר {זרוק IllegalArgumentException ("קובץ לא קריא"); }} לתפוס (FileNotFoundException שגיאה) {אם (! isCorrectFileName (fileName)) {לזרוק IncorrectFileNameException חדש ("שם קובץ שגוי:" + שם קובץ, שגיאה); } // ...} לתפוס (IllegalArgumentException שגיאה) {if (! containExtension (fileName)) {זרוק חדש IncorrectFileExtensionException ("שם הקובץ אינו מכיל סיומת:" + fileName, err); } // ...} 

5. מסקנה

חריגים מותאמים אישית מועילים מאוד כאשר אנו צריכים לטפל בחריגים ספציפיים הקשורים להיגיון העסקי. בשימוש נכון הם יכולים לשמש ככלי שימושי לטיפול ורישום חריגים טובים יותר.

הקוד לדוגמאות המשמשות במאמר זה זמין באתר Github.


$config[zx-auto] not found$config[zx-overlay] not found