רשימת Java לא נתמךOperationException

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

במדריך מהיר זה נדון בשכיחות נפוצה יוצא מן הכלל שיכולה להתרחש כשעובדים עם ממשק API של רובם רשימה יישומים - לא נתמךOperationException.

א java.util.List יש יותר פונקציונליות מאשר ארייס יכול לתמוך. לדוגמה, עם שיחת שיטה מובנית אחת בלבד, ניתן לבדוק אם אלמנט ספציפי נמצא בתוך המבנה. זו בדרך כלל הסיבה שלעיתים אנו צריכים להמיר מַעֲרָך אל א רשימה אוֹ אוסף.

להיכרות עם הליבה של Java רשימה יישום - רשימת מערך - אנא עיין במאמר זה.

2. לא נתמךOperationException

דרך תכופה בה מתרחשת שגיאה זו היא כאשר אנו משתמשים asList () שיטה מ java.util. מערכים:

רשימת סטטים ציבורית asList (T ... a)

הוא חוזר:

  • בגודל קבוע רשימה לפי גודל נתון מַעֲרָך
  • אלמנט מאותו סוג כמו במקור מַעֲרָך וזה חייב להיות לְהִתְנַגֵד
  • אלמנטים באותו סדרכמו במערך המקורי
  • רשימה שהיא ניתן לסדר ומכשירים גישה אקראית

מכיוון ש- T הוא varargs, נוכל להעביר מערך או את הפריטים ישירות כפרמטרים, והשיטה תיצור רשימה מאותחל בגודל קבוע:

רשימת פרחים = Arrays.asList ("אגרטום", "אליום", "פרג", "מנטה");

אנחנו יכולים גם לעבור בפועל מַעֲרָך:

מחרוזת [] פרחים = {"Ageratum", "Allium", "Poppy", "Catmint"}; רשימת flowerList = Arrays.asList (פרחים);

מאז חזר רשימה הוא בגודל קבוע רשימה, איננו יכולים להוסיף / להסיר אלמנטים.

ניסיון להוסיף עוד אלמנטים יגרום לא נתמךOperationException:

מחרוזת [] פרחים = {"Ageratum", "Allium", "Poppy", "Catmint"}; רשימת flowerList = Arrays.asList (פרחים); flowerList.add ("סלוסיה");

השורש לכך יוצא מן הכלל הוא שהאובייקט שהוחזר אינו מיישם את לְהוֹסִיף() פעולה מכיוון שהיא אינה זהה ל- java.util.ArrayList.

זה רשימת מערך, מ java.util. מערכים.

דרך נוספת להשיג את אותו חריג היא על ידי ניסיון להסיר אלמנט מהרשימה שהושגה.

מצד שני, ישנן דרכים להשיג שינוי רשימה למקרה שנזדקק לזה.

אחד מהם הוא ליצור רשימת מערך או כל סוג של רשימה ישירות מהתוצאה של asList ():

מחרוזת [] פרחים = {"Ageratum", "Allium", "Poppy", "Catmint"}; רשימת flowerList = ArrayList חדש (Arrays.asList (פרחים));

3. מסקנה

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

כמו תמיד, קוד המקור המלא של הדוגמאות זמין באתר GitHub.


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