מחשביםתכנות

הגנריקה Java: תיאור ושיטות

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

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

הגנריקה Java: תיאור ודוגמא

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

שים לב לאופן שבו ההכרזה בכיתה מתרחשת זוג. מיד לאחר מעמד שם, בסוגריים זוויתיים פתוח, אשר הצביע על מכתב ט זה הוא סוג של מילוי, אשר נמצאת בתהליך של יצירת מופע של מחלקה זו יוחלפו על ידי סוג מסוים. זה נראה כדלקמן: זוג obj = זוג חדש (). יצוין כי במקום T יכול לציין כל מכתב, אבל, ככלל, להשתמש T, V או E.

הערה: החל בגרסה השמינית של Java, המפרט את סוג היעד בהכרזותיו בסוגר זוויתיים התיחסות הבנאי ניתן להשאיר ריק. אז למשל ניתן לשכתב כאמור: זוג obj = חדש זוג <> ().

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

בעקבות ההיגיון של טיעונים firstItem secondItem, התייחס בנאי המתאים גם חייב להיות מסוג Integer או תת. אם תנסה להעביר נתונים מסוג זה שונה ממה צוין בעת יצירת אובייקט, המהדר לא ייתן את הטעות הזאת. לפיכך, בנאי ארגומנטים כאשר אובייקט יהיה כדלקמן: זוג obj = זוג חדש <> (חדש שלם (1), חדש שלם (2)). כנ"ל לגבי הטיעונים ושיטות setFirst setSecond. וכפי שאתם בוודאי כבר ניחשתם, שיטות GetFirst getSecond ויחזור ערך של Integer סוג.

כללי עם סוגי מעמד מספר פרמטרים

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

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

תכונות מסוימות של כללות

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

הערת נקודה חשובה. קישורים גרסאות שונות של אותו מעמד הגנרית Java לא יכול להצביע על אחד ואותו אובייקט. כלומר, נניח שיש לנו שני קישורים: זוג obj1 וזוג <זוגי> obj2. כתוצאה מכך, עולה בקנה אחד obj1 = obj2 שגיאה. למרות ששני המשתנים הם מסוג הזוג , האובייקטים שאליהם הם מתייחסים, הם שונים. זוהי דוגמא מעולה של סוגי הביטחון Generic Java.

הגבלות על כיתות גנריות

חשוב לדעת כי הכללות יכולות להיות מיושמות רק להפנות סוגים, כי הוא להעביר פרמטרי טיעון Java בכיתת גנריות חייב להיות סוג כיתה. סוגים פשוטים אלו, כגון, למשל, כפולים או ארוכים, לא ניתן להעביר. במילים אחרות, ההכרזה בכיתה הבאה קו שני אסור: זוג obj. עם זאת, מגבלה זו אינה בעיה רצינית, כפי שיש מעמד מעטפת Java מתאים לכל סוג פרימיטיווי. למען הדיוק, אם זוג בכיתה אתה רוצה לתמצת שלם ו avtoupakovka ערך בוליאני עושה הכל בשבילך: זוג <שלם, בוליאני> obj = חדש זוג <> (25, נכון).

הגבלה חמורה נוספת היא חוסר היכולת ליצור מופע של סוג הפרמטר. לדוגמא, את השורה הבאה תגרום שגיאת הידור: T הראשונה = T החדש (). זה ברור, כי אתה לא יודע מראש אם ויכוח עבר בכיתה מלאה או מופשטת, או אפילו ממשק. כנ"ל לגבי יצירת מערכים.

סוגים מוגבלים

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

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

הגבלה "בתחתית" היא בדיוק באותו אופן, אך במקום המילה מרחיבה לאיית את מילת הסופר. זה מסווג בכיתה זוג אומר שבמקום T ניתן להחליף או ArrayList, או כל מעמד או ממשק שהוא יורש.

שיטות בנאים Java גנרי

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

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

אם הכל נעשה בצורה דומה לבנאי:

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

שלם

מחרוזת

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 iw.delachieve.com. Theme powered by WordPress.