פורסם 2009 בנובמבר 2116 שנים שלום חברים, אני צריך לעשות שימוש בHashMap, שהמפתח של כל איבר יהיה מסוג Stringוהתוכן יהיה אובייקט מסוג מחלקה שאני יוצר.העניין הוא כשאני מגדיר: private HashMap commandsMap; //CTOR public Commands(Simulation s) { sim = s; commandsMap = new HashMap<String,Robot>();Commands זה שם המחלקה שההאשמאפ נמצא בתוכה.הוא רושם לי את ההערה\אזהרה\שגיאה הבאה בצד:HashMap is a raw type. References to generic type HashMap<K,V> should be parameterizedמה ההודעה אומרת?תודה מראש לעוזרים.
פורסם 2009 בנובמבר 2116 שנים בהגדרה של commandsMap הטיפוס שלו צריך להיות <HashMap<String,Robot (או אפילו יותר טוב, <Map<String,Robot).
פורסם 2009 בנובמבר 2116 שנים מחבר מה ההבדל בין Map לHashMap?אני צריך שתהיה לי היכולת לשלוף איבר בO(1).האם גם Map תומך בפונ' put?
פורסם 2009 בנובמבר 2216 שנים הכוונה היא להגדיר את commandsMap בתור Map, אבל לעשות לו new HashMap.ההסבר:Map זה ה-Interface, ו-HashMap זה המחלקה שמממשת אותו. בעקרון, איפה שאפשר, מומלץ להשתמש בinterface על פני המחלקה, כדי לשמור על הקוד שלך גמיש. אם בעתיד, לדוגמה, תחליט שאתה רוצה למעשה להשתמש בסוג אחר של Map (לדוגמה, LinkedHashMap) כל מה שתצטרך לעשות הוא להחליף את HashMap ל-LinkedHashMap בשורה שבה אתה עושה new.
פורסם 2009 בנובמבר 2216 שנים מחבר אם אני מממש ממשק, כמו שאמרת למשל.ואני יוצר אובייקט של הממשק שמכיל בעצם את הקלאס שמימשה אותו (מין פולימורפיזם כזה)השאלה היא אם אני יכול לגשת למשתנים\מתודות של הקלאס ה"בן" או לא?לדוגמא יש ממשק עם כמה מתודות, ובקלאס הבן הוספתי מתודה אחרת. האם אני אוכל לגשת למתודה הזאת דרך אובייקט של הממשק?
פורסם 2009 בנובמבר 2216 שנים לא תוכל בלי לבצע casting.נניח שיש ממשק בשם A, ושתי מחלקות בשם B ו-C שמממשות אותו.נניח ש-B מגדיר מתודה כלשהי foo שלא מופיעה ב-A, ואתה מגדיר משתנה x שהטיפוס שלו הוא A, ומאתחל אותו באמצעות new B.אז לא תוכל לעשות x.foo, כי לא מובטח לך שהטיפוס הדינמי (dynamic type) של x הוא אכן B - יכול להיות שאיפשהו בקוד מישהו עשה x = new C.מה שכן, תוכל לעשות המרה - תגדיר B y = (B)x, ואז, אם הטיפוס הדינמי של x הוא אכן B, אז תוכל לעשות y.foo. שים לב שאם הטיפוס הדינמי הוא לא x אז תהיה לך שגיאה (או שתהיה לך שגיאת המרה, או שיוחזר null, אני לא באמת זוכר).
פורסם 2009 בנובמבר 2216 שנים מחבר הבנתי, תודה על העזרה.עכשיו רציתי לשאול משהו בנוגע להעברה ש ל אובייקטים לפונ'\מתודות.בC++ לימדו אותנו שעדיף במקרים להעביר ברפרנס כי אם יש אובייקט גדול אז הוא לא מועתק, אלא ניגשים אליו ברפרנס.השאלה שלי היא האם בג'אווה זה עובד אותו דבר? מומלץ לשלוח אובייקטים ע"י רפרנס? יש דבר כזה בכלל? איך עושים?
פורסם 2009 בנובמבר 2216 שנים בג'אווה הכל עובר by reference (פרט לטיפוסים פרימיטיביים כמו int/boolean). אם אתה רוצה ספציפית להעתיק אובייקט, אז צריך לעשות clone (בהנחה שהאובייקט מימש את המתודה הזו) או copy constructor אם יש כזה.
פורסם 2009 בנובמבר 2516 שנים מחבר תודה על העזרה שניצל.אודה לך אם תוכל לענות לי על עוד שאלה.אחרי ששמרתי איברים בHashMap, רוצים שאני אצור PriorityQueue , אעביר אליו את הערכים (עם מימוש comprator)ואז אדפיס אותם כאילו לפי סדר מסוים. הבעיה היא, שאין לי מושג איך לגשת לאיברים שבMap, הדרך היחידה שלי להשיג איברהיא לפי הערך\המפתח שלו, אבל מה אם אני לא יודע אותם? במקרה שלי המפתח הוא מחרוזת והערך הוא אובייקט מסוג מסויים.איך אפשר "להעתיק" את האיברים לתור?
פורסם 2009 בנובמבר 2516 שנים מחבר הוא רוצה שאני אספק לו איטרטור מה שאני לא יכול לעשות בMAP.אם יש לי:private HashMap<String,Robot> robots;//robots map private int size; //size of the map private PriorityQueue<Robot> pQ;Robot הוא ממשק.אז איך אני צריך לרשום את הלולאה שתעתיק ערכים מה-MAP לPQ?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.