מופע Java של מפעיל

1. הקדמה

במדריך מהיר זה נלמד על ה- מופע של מפעיל בג'אווה.

2. מה זה מופע של מַפעִיל?

מופע של הוא מפעיל בינארי המשמש לבדיקה אם אובייקט הוא מסוג נתון. תוצאת המבצע היא או נָכוֹן אוֹ שֶׁקֶר. זה ידוע גם כמפעיל השוואת סוגים מכיוון שהוא משווה את המופע לסוג.

לפני השלכת אובייקט לא ידוע, מופע של יש להשתמש תמיד בבדיקה. פעולה זו מסייעת בהימנעות ClassCastException בזמן ריצה.

ה מופע של התחביר הבסיסי של המפעיל הוא:

(אובייקט) מופע של (סוג)

בואו נראה דוגמה בסיסית ל- מופע של מַפעִיל. ראשית, בואו ניצור כיתה עָגוֹל:

סבב מחזור ציבורי {// פרטי יישום}

לאחר מכן, בואו ניצור כיתה טַבַּעַת שמתארך עָגוֹל:

טבעת בכיתה ציבורית משתרעת על סבב {// פרטי היישום}

אנחנו יכולים להשתמש מופע של כדי לבדוק אם מופע של טַבַּעַת הוא של עָגוֹל סוּג:

@Test הציבור בטל givenWhenInstanceIsCorrect_thenReturnTrue () {טבעת טבעת = טבעת חדשה (); Assert.assertTrue (טבעת מופע של עגול); }

3. איך ה מופע של עבודת מפעילים?

ה מופע של מפעיל עובד על עקרון מערכת היחסים זה. הרעיון של מערכת יחסים זה- a מבוסס על ירושה מעמדית או יישום ממשק.

כדי להדגים זאת, בואו ליצור צוּרָה מִמְשָׁק:

צורת ממשק ציבורי {// פרטי יישום}

בואו גם ליצור שיעור מעגל שמיישם את צוּרָה ממשק וגם מרחיב את עָגוֹל מעמד:

כיתת הציבור מעגל מרחיב מכשירים עגולים צורה {// פרטי יישום}

ה מופע של התוצאה תהיה נָכוֹן אם האובייקט הוא מופע מהסוג:

@Test public void givenWhenObjectIsInstanceOfType_thenReturnTrue () {מעגל מעגל = מעגל חדש (); Assert.assertTrue (מופע מעגל של מעגל); }

זה גם יהיה נָכוֹן אם האובייקט הוא מופע של תת-סוג מהסוג:

@Test ציבורי בטל giveWhenInstanceIsOfSubtype_thenReturnTrue () {מעגל מעגל = מעגל חדש (); Assert.assertTrue (מופע מעגל של עגול); }

אם הסוג הוא ממשק, הוא יחזור נָכוֹן אם האובייקט מיישם את הממשק:

@Test ציבורי בטל givenWhenTypeIsInterface_thenReturnTrue () {מעגל מעגל = מעגל חדש (); Assert.assertTrue (מופע מעגלי של צורה); }

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

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

יישומי משולש ממעמד ציבורי צורה {// פרטי יישום}

עכשיו, אם נשתמש מופע של כדי לבדוק אם א מעגל הוא מופע של משולש:

@Test הציבור בטל givenWhenComparingClassInDiffHierarchy_thenCompilationError () {מעגל מעגל = מעגל חדש (); Assert.assertFalse (מעגל של משולש); }

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

java.lang.Error: בעיית אוסף לא פתורה: סוגי אופרנדים תנאים לא תואמים מעגל ומשולש

4. שימוש מופע של עם ה לְהִתְנַגֵד סוּג

בג'אווה כל מחלקה יורשת במשתמע מה- לְהִתְנַגֵד מעמד. לכן, באמצעות מופע של מפעיל עם לְהִתְנַגֵד סוג תמיד יעריך עד נָכוֹן:

@Test ציבורי בטל givenWhenTypeIsOfObjectType_thenReturnTrue () {אשכול = חוט חדש (); Assert.assertTrue (מופע חוט של אובייקט); }

5. שימוש ב- מופע של מפעיל כאשר אובייקט הוא ריק

אם אנו משתמשים ב- מופע של מפעיל על כל אובייקט שהוא ריק, זה חוזר שֶׁקֶר. כמו כן, אין צורך בבדיקת אפס בעת שימוש ב- מופע של מַפעִיל.

@ Test public void givenWhenInstanceValueIsNull_thenReturnFalse () {מעגל מעגל = null; Assert.assertFalse (מעגל של מעגל); }

6. מופע של וגנריות

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

למשל, אם ננסה לקמפל את הקטע הבא:

מין חלל סטטי ציבורי (אוסף רשימות) {אם (מופע אוסף של רשימה) {// מיין מחרוזות אחרת} // הושמט}

ואז אנו מקבלים את שגיאת האוסף הזה:

שגיאה: סוג כללי לא חוקי למשל של אם (מופע אוסף של רשימה) {^

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

הסוגים המאוחדים ב- Java הם כדלקמן:

  • טיפוסים פרימיטיביים כמו int
  • שיעורים וממשקים לא גנריים כמו חוּט אוֹ אַקרַאִי
  • סוגים גנריים בהם כל הסוגים הם כרטיסי בר ללא גבולות כמו מַעֲרֶכֶת אוֹ מַפָּה
  • סוגים גולמיים כמו רשימה או HashMap
  • מערכים מסוגים אחרים הניתנים לתיקון כמו מחרוזת [], רשימה [], אוֹ מַפָּה[]

מכיוון שפרמטרים מהסוג הגנרי אינם מאושרים, איננו יכולים להשתמש בהם גם:

ציבורי בוליאני סטטי ציבורי isOfType (קלט אובייקט) {חזרה קלט מופע של T; // לא ירכיב}

עם זאת, אפשר לבדוק נגד משהו כמו רשימה:

אם (מופע אוסף של רשימה) {// עשה משהו}

7. מסקנה

במדריך זה למדנו על ה- מופע של מפעיל וכיצד להשתמש בו. דוגמאות הקוד המלאות זמינות באתר GitHub.


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