שאלה נוספת ב-JAVA למרות

GilBates

New member
שאלה נוספת ב-JAVA למרות

שעוד לא הספיקו להשיב לי על הקודמת: יש לי מחלקה שהגדרתי כך (שימוש ב- Generics ע"מ לאפשר להגדיר מטריצה מכל סוג שהוא):
public class MyMatrix<E>{ //extends AbstractList<E> protected E[][] matrix; protected int size;​
ומוגדרות מספר מתודות כמו להדפיס, וכו'. אני רוצה להגדיר מחלקה שיורשת ממנה חדשה SpecialMatrix שהיא תאתחל את המטריצה בערכים עולים 1,2..
public class ShuffleMatrix extends MyMatrix<Integer> { private void init(){ int i = 0, j = 0, x = 0; while (i < size && j < size) { matrix[j] = x++; // I get ClassCastException here!!! j++; if (j % size == 0) { j = 0; i++; } } } }

אני לא מצליח לעשות כך - האם למישהו יש רעיון?אולי טעיתי בהצהרות תודה מראש גיל
 

GilBates

New member
ע"מ לנסות להבהיר - אני קודם כך

יוצר מחלקה כללית גנרית לטיפול במטריצות MyMatrix ויש לי יישום ספציפי (אותו אני רוצה להבצע במחלקה שיורשת עבור type של Integer) שבו אני רוצה לאתחל את המטריצה במספרים עולים.
 

jakarta

New member
שים לב

נראה לי שקיים בלבול בין Integer האובייקט, וint פרימיטיבי. אתה הגדרת את הסוג במערך כאובייקט, ומנסה להכניס ערך פרימיטיבי. דרך אגב, הקוד הזה עושה abuse ל generics, שכל מטרתו היא להמנע מהמרה (casting), וכך להחליף סכנת Exception בשגיאת קומפילציה.
 

GilBates

New member
תודה על התגובה - אבל גם כאשר

הגדרתי את הערך המוכנס למערך כ- Integer זה לא עבד, מהסיבה היא שכנראה המטריצה שלי מוגדר כ- E[] או כ- Object - אז אני כן מצליח לאתחל את כולה בערך אחד, אבל לא בערכים עולים למשל (שמצריכים קידום ++) איך בכל זאת עושים את זה כללי כדי שאני אוכל ליצור מופע עבור כל TYPE (למשל Integer, Long וכו' שהם המעטפת לטיפוסים הפרימיטיביים)?
 

selalerer

New member
אז למה שלא תעשה ככה:

public class ShuffleMatrix extends MyMatrix<E> { private void init(){ int i = 0, j = 0; E x = 0; while (i < size && j < size) { matrix[j] = x++; j++; if (j % size == 0) { j = 0; i++; } } } }

זה יעבוד רק עבור מחלקות שיש להן ++ ואפשר לעשות להן 0= (ככה זה לפחות ב++C).
 

GilBates

New member
סלע, הבעיה שהוא צועק לי שהאופראטור

++ אינו מוגדר עבור טיפוס E... אני מיואש.. מה עושים?
 

selalerer

New member
באייייימת?

איך הוא יודיייע מה זה E לפני שכתבת בתוכנית איזה <MyMatrix<int איפשהו? זה לא היה קורה ב++C זהו נגמרה מלחמת השפות, עכשיו אין ספק
 
למעלה