הערה Java @ SafeVarargs
1. סקירה כללית
במדריך מהיר זה, נסתכל על @ SafeVarargs ביאור.
2. ה @ SafeVarargs ביאור
Java 5 הציג את המושג varargs, או פרמטר שיטה באורך משתנה, כמו גם סוגים פרמטרים.
שילוב אלה יכול לגרום לנו לבעיות:
T סטטי ציבורי [] לא בטוח (אלמנטים T ...) {אלמנטים להחזיר; // לא בטוח! לעולם אל תחזיר מערך varargs פרמטרי} T סטטי ציבורי [] שבור (זרע T) {T [] צמח = לא בטוח (זרע, זרע, זרע); // שבור! זה יהיה אובייקט [] לא משנה מה T הוא מפעל החזרה; } צמח ריק סטטי ציבורי () {מחרוזת [] צמחים = שבור ("זרע"); // ClassCastException}
בעיות אלה הן מסובכות עבור מהדר לאשר, ולכן הוא נותן אזהרות בכל פעם ששניהם משולבים, כמו במקרה של מְסוּכָּן:
אזהרה: [לא מסומן] זיהום ערימה אפשרי מ- vararg מסוג T פרמטי T סטטי ציבורי T [] לא בטוח (אלמנטים T ...) {
שיטה זו, אם משתמשים בה בצורה לא נכונה, כמו במקרה של שָׁבוּר, יזהם an לְהִתְנַגֵד[] מערך לתוך הערימה במקום הסוג המיועד ב.
כדי לרסק את האזהרה הזו, אנחנו יכולים להוסיף את @ SafeVarargs ביאור על שיטות קונסטרוקציות סופיות או סטטיות.
@ SafeVarargs הוא כמו @SupressWarnings בכך שהוא מאפשר לנו להכריז כי אזהרת מהדר מסוימת היא חיוב כוזב. ברגע שנדאג שפעולותינו בטוחות, אנו יכולים להוסיף את ההערה הזו:
מחלקה ציבורית {גרסאות רשימה פרטיות = ArrayList חדש (); @ SafeVarargs ציבורי בטל סופי ציבורי (T ... toAdd) {עבור (גרסת T: toAdd) {versions.add (גרסה); }}}
שימוש בטוח בוורגס הוא מושג מסובך כשלעצמו. למידע נוסף, לג'וש בלוך יש הסבר נהדר בספרו, Java אפקטיבי.
3. מסקנה
במאמר מהיר זה, ראינו כיצד להשתמש ב- @ SafeVarargs ביאור ב- Java.
קוד המקור המלא של הדוגמאות ניתן למצוא באתר GitHub.