הסברה מסוג Java 10 LocalVariable

מאמר זה הוא חלק מסדרה: • Java 10 LocalVariable Type-Sference (מאמר נוכחי) • Java 10 שיפורי ביצועים

• תכונות חדשות של Java 10

1. סקירה כללית

אחד השיפורים הגלויים ביותר ב- JDK 10 הוא הסקת סוג של משתנים מקומיים עם אתחולים.

מדריך זה מספק את הפרטים של תכונה זו עם דוגמאות.

2. מבוא

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

הודעת מחרוזת = "ביי, ג'אווה 9";

ב- Java 10, כך נוכל להכריז על משתנה מקומי:

@Test ציבורי בטל כאשרVarInitWithString_thenGetStringTypeVar () {var message = "שלום, Java 10"; assertTrue (מופע הודעה על מחרוזת); }

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

בדוגמא לעיל, סוג הוֹדָעָה יהיה חוּט.

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

שיפור זה מסייע בהפחתת קוד boilerplate; לדוגמה:

מפת מפה = HashMap חדש ();

כעת ניתן לשכתב זאת כ:

var idToNameMap = חדש HashMap ();

זה גם עוזר להתמקד בשם המשתנה ולא בסוג המשתנה.

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

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

3. שימוש לא חוקי ב var

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

var n; // שגיאה: לא יכול להשתמש ב- 'var' במשתנה ללא אתחול

זה גם לא יעבוד אם יאותחל עם ריק:

var emptyList = null; // שגיאה: אתחול משתנה הוא 'null'

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

public var = "שלום"; // שגיאה: 'var' אסור כאן

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

var p = (מחרוזת s) -> s.length ()> 10; // שגיאה: ביטוי למבדה זקוק לסוג יעד מפורש

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

var arr = {1, 2, 3}; // שגיאה: אתחול מערך זקוק לסוג יעד מפורש

4. הנחיות לשימוש var

יש מצבים שבהם var יכול לשמש באופן חוקי, אך לא יכול להיות רעיון טוב לעשות זאת.

לדוגמא, במצבים בהם הקוד יכול להיות פחות קריא:

var result = obj.prcoess ();

כאן, אם כי שימוש חוקי ב var, קשה להיות קשה להבין את הסוג שה- תהליך()מה שהופך את הקוד לקריא פחות.

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

מצב נוסף בו עדיף להימנע var נמצא בנחלים עם צינור ארוך:

var x = emp.getProjects.stream () .findFirst () .map (String :: length) .orElse (0);

שימוש ב var עשוי גם לתת תוצאה בלתי צפויה.

לדוגמא, אם נשתמש בו עם מפעיל היהלומים שהוצג בג'אווה 7:

var empList = ArrayList חדש ();

הסוג של empListיהיה רשימת מערךולא רשימה. אם אנחנו רוצים שזה יהיה רשימת מערך, נצטרך להיות מפורשים:

var empList = ArrayList חדש ();

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

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

@Test הציבור בטל כאשרVarInitWithAnonymous_thenGetAnonymousType () {var obj = אובייקט חדש () {}; assertFalse (obj.getClass (). שווה (Object.class)); }

עכשיו, אם ננסה להקצות עוד אחד לְהִתְנַגֵדל התנגדות, נקבל שגיאת אוסף:

obj = אובייקט חדש (); // שגיאה: לא ניתן להמיר אובייקט ל 

הסיבה לכך היא שהסוג הנגזר של התנגדות לא לְהִתְנַגֵד.

5. מסקנה

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

כרגיל, ניתן למצוא קטעי קוד ב- GitHub.

הַבָּא » שיפורי ביצועים של Java 10

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