שאלות ראיונות בהערות ג'אווה (+ תשובות)

מאמר זה הוא חלק מסדרה: • שאלות ראיונות בנושא אוספי Java

• שאלות בנושא ראיונות מערכת מסוג Java

• שאלות על ראיונות במקביל ל- Java (+ תשובות)

• שאלות על ראיונות מבנה כיתת Java ו אתחול

• Java 8 שאלות ראיונות (+ תשובות)

• ניהול זיכרון בשאלות ראיון עם Java (+ תשובות)

• שאלות ראיונות עם Java Generics (+ תשובות)

• שאלות ראיונות עם בקרת זרימת Java (+ תשובות)

• שאלות על ראיונות חריגים עם Java (+ תשובות)

• שאלות ראיונות בהערות ג'אווה (+ תשובות) (מאמר נוכחי) • שאלות ראיונות מובילות במסגרת האביב

1. הקדמה

הערות היו קיימות מאז Java 5, ובימינו, הם מבני תכנות בכל מקום המאפשרים העשרת הקוד.

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

2. שאלות

שאלה 1. מהן הערות? מהם מקרי השימוש האופייניים שלהם?

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

מקרי השימוש האופייניים שלהם הם:

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

שאלה 2. תאר כמה הערות שימושיות מהספרייה הסטנדרטית.

ישנן כמה הערות ב- java.lang ו הערה java.lang חבילות, הנפוצות יותר כוללות אך לא מוגבלות ל:

  • @Override - מסמן ששיטה נועדה לעקוף אלמנט שהוכרז בסופר-קלאס. אם הוא לא מצליח לבטל את השיטה בצורה נכונה, המהדר ינפיק שגיאה
  • @ מיושן - מציין כי האלמנט הוצא משימוש ואין להשתמש בו. המהדר ישלח אזהרה אם התוכנית משתמשת בשיטה, מחלקה או שדה המסומנים בהערה זו
  • @SuppressWarnings - אומר למהדר לדכא אזהרות ספציפיות. הנפוץ ביותר בשימוש בממשק לקוד מדור קודם שנכתב לפני הופעת הגנריות
  • @FunctionalInterface - שהוצג בג'אווה 8, מציין כי הצהרת הסוג היא ממשק פונקציונלי וניתן לספק את יישומה באמצעות ביטוי למבדה

שאלה 3. כיצד ניתן ליצור ביאור?

ביאורים הם סוג של ממשק בו מילת המפתח מִמְשָׁק קדמה @, וגופו מכיל אלמנט מסוג הערה הצהרות שנראות דומות מאוד לשיטות:

ממשק @ ממשק SimpleAnnotation {ערך מחרוזת (); int [] סוגים (); }

לאחר הגדרת ההערה, תוכל להתחיל להשתמש בה דרך הקוד שלך:

@SimpleAnnotation (value = "an element", types = 1) Element class public {@SimpleAnnotation (value = "an attribute", types = {1, 2}) אלמנט ציבורי nextElement; }

שים לב שכאשר אתה מספק ערכים מרובים עבור רכיבי מערך, עליך לצרף אותם בסוגריים.

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

public @interface SimpleAnnotation {ערך מחרוזת () ברירת המחדל "זהו אלמנט"; int [] types () ברירת מחדל {1, 2, 3}; }

כעת תוכל להשתמש בהערה ללא אלמנטים אלה:

@SimpleAnnotation אלמנט בכיתה ציבורית {// ...}

או רק חלק מהם:

@SimpleAnnotation (value = "an attribute") אלמנט ציבורי nextElement;

שאלה 4. אילו סוגי אובייקטים ניתן להחזיר מהצהרת שיטת ביאור?

סוג ההחזרה חייב להיות פרימיטיבי, חוּט, מעמד, Enum, או מערך של אחד מהסוגים הקודמים. אחרת, המהדר ישליך שגיאה.

הנה קוד לדוגמא שעוקב בהצלחה אחר עיקרון זה:

enum Complexity {LOW, HIGH} public @interface ComplexAnnotation {Class class (); int [] סוגים (); מורכבות מורכבות (); }

הדוגמה הבאה לא תצליח להיערך מאז לְהִתְנַגֵד אינו סוג החזרה תקף:

public @interface FailingAnnotation {מורכבות האובייקט (); }

ש 5. על אילו אלמנטים בתכנית ניתן להערות?

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

מחלקה ציבורית @SimpleAnnotation החל {@SimpleAnnotation פרטי String aField; @SimpleAnnotation ציבורי החל () {// ...}}

שיטות ופרמטרים שלהן:

@SimpleAnnotation בטל פומבי aMethod (@SimpleAnnotation מחרוזת פרמטר) {// ...}

משתנים מקומיים, כולל לולאה ומשתני משאבים:

@SimpleAnnotation int i = 10; עבור (@SimpleAnnotation int j = 0; j <i; j ++) {// ...} נסה (@SimpleAnnotation FileWriter כותב = getWriter ()) {// ...} לתפוס (Exception ex) {// .. .}

סוגי הערות אחרים:

@SimpleAnnotation public @interface ComplexAnnotation {// ...}

ואפילו חבילות, דרך package-info.java קוֹבֶץ:

חבילת @ PackageAnnotation com.baeldung.interview.annotations;

החל ב- Java 8, ניתן להחיל אותם גם על ה- להשתמש מסוגים. כדי שזה יעבוד, על ההערה לציין @יַעַד ביאור עם ערך של ElementType.USE:

@Target (ElementType.TYPE_USE) ציבורי @ ממשק SimpleAnnotation {// ...}

כעת ניתן ליישם את ההערה על יצירת מופע מחלקה:

חדש @ SimpleAnnotation החל ();

סוג שחקנים:

aString = (מחרוזת @ SimpleAnnotation) משהו;

סעיף יישומים:

המחלקה הציבורית מיישמת את רשימת SimpleList @ רשימת סימנים פשוטים {// ...}

וגם זורק סָעִיף:

בטל aMethod () זורק @SimpleAnnotation חריג {// ...}

שאלה 6. האם יש דרך להגביל את האלמנטים שבהם ניתן ליישם ביאור?

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

הנה דוגמה להגבלת השימוש ב- @SimpleAnnotation ביאור להצהרות שדה בלבד:

@Target (ElementType.FIELD) ציבורי @ ממשק SimpleAnnotation {// ...}

אנו יכולים להעביר קבועים מרובים אם ברצוננו להפוך אותו ליישום בהקשרים רבים יותר:

@Target ({ElementType.FIELD, ElementType.METHOD, ElementType.PACKAGE})

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

@Target ({}) ממשק @ ממשק NoTargetAnnotation {// ...}

ש 7. מהן הערות מטא?

האם הערות חלות על הערות אחרות.

כל ההערות שאינן מסומנות באמצעות @יַעַד, או מסומנים בו אך כוללים ANNOTATION_TYPE קבועים הם גם מטא-ביאורים:

@Target (ElementType.ANNOTATION_TYPE) ציבורי @ ממשק פשוט הערה {// ...}

ש 8. מהן ביאורים חוזרים?

אלה הערות שניתן להחיל יותר מפעם אחת על אותה הצהרת אלמנט.

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

ראשית, עלינו להכריז על ביאור חוזר:

@ Repeatable (Schedules.class) ציבורי @ ממשק לוח זמנים {מחרוזת () ברירת מחדל "בוקר"; }

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

לוחות זמנים ממשק @ ציבורי {ערך תזמון [] (); }

כעת נוכל להשתמש ב- @Schedule מספר פעמים:

@Schedule @Schedule (time = "afternoon") @Schedule (time = "night") בטל מתוזמן () {// ...}

שאלה 9. איך אתה יכול להשיג הערות? איך זה קשור למדיניות השימור שלה?

אתה יכול להשתמש ב- API של השתקפות או במעבד הערות כדי לאחזר הערות.

ה @הַחזָקָה ביאור שלה מדיניות שמירה פרמטר משפיע על האופן שבו ניתן לאחזר אותם. ישנם שלושה קבועים מדיניות שמירה enum:

  • RetentionPolicy.SOURCE - גורם להסרת ההערה על ידי המהדר אך מעבדי ההערות יכולים לקרוא אותם
  • RetentionPolicy.CLASS - מציין כי ההערה מתווספת לקובץ הכיתה אך אינה נגישה באמצעות השתקפות
  • RetentionPolicy.RUNTIME –הערות נרשמות בקובץ הכיתה על ידי המהדר ונשמרות על ידי ה- JVM בזמן הריצה, כך שניתן יהיה לקרוא אותן בצורה רפלקטיבית.

הנה קוד לדוגמה ליצירת ביאור שניתן לקרוא בזמן הריצה:

@Retention (RetentionPolicy.RUNTIME) ציבורי @ ממשק תיאור {ערך מחרוזת (); }

כעת ניתן לאחזר הערות באמצעות השתקפות:

תיאור תיאור = AnnotatedClass.class.getAnnotation (Description.class); System.out.println (description.value ());

מעבד ביאורים יכול לעבוד איתו RetentionPolicy.SOURCE, זה מתואר במאמר Java Annotation Processing and Create a Builder.

RetentionPolicy.CLASS ניתן לשימוש כאשר אתה כותב מנתח Java bytecode.

ש 10. האם יתקיים הקוד הבא?

@Target ({ElementType.FIELD, ElementType.TYPE, ElementType.FIELD}) public @interface TestAnnotation {int [] value () default {}; }

לא. זו שגיאת זמן הידור אם אותו קבוע אנומטי מופיע יותר מפעם אחת ב- @יַעַד ביאור.

הסרת הקבוע הכפול תגרום לקוד להיערך בהצלחה:

@Target ({ElementType.FIELD, ElementType.TYPE})

שאלה 11. האם ניתן להאריך ביאורים?

לא. ההערות נמשכות תמיד java.lang.annotation. הערה, כאמור במפרט שפת Java.

אם ננסה להשתמש ב- מרחיב סעיף בהצהרת ביאור, נקבל שגיאת אוסף:

public @interface AnAnnotation מרחיב OtherAnnotation {// שגיאת קומפילציה}

סיכום

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

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

הַבָּא » שאלות ראיונות עליונות למסגרת האביב « שאלות ראיונות קודמות על חריגות Java (+ תשובות)

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