1
我確實有一個抽象類,我們稱之爲「GameObjects」和許多像「Stone」一樣的子類。 在運行時即時解析一個Xml文件,在那裏我閱讀了關於需要被創建的GameObjects(比如「Stone」)和一些關於它們的附加信息。要創建特定的遊戲對象我使用反射像這樣:用HashMap反射
Class<?> cl = Class.forName("classpath."+typ);
Constructor con = cl.getConstructor(float.class, float.class, float.class, float.class);
Object gameObj = con.newInstance(xPos, yPos, widht, height);
現在我想把遊戲物體進入一個HashMap <字符串,遊戲對象>。但是這不起作用:
currentGameObjects.put(name, gameObj);
明顯地導致gameObj是typ對象。什麼工作是一樣的東西:
currentGameObjects.put(name, (GameObject)gameObj);
但我實際上可以需要像
currentGameObjects.put(name, (Stone)gameObj);
問題是像我說,我不知道在運行時,如果它是一個石或花或彩虹或任何.. ..
任何想法如何我可以實現,或一個很好的解決方法?
編輯: 也許我想在這裏變得複雜。 但基本上我的想法是。爲了讓我可以遍歷GameObjects的Map。 因此,舉例來說,我可以這樣認爲,就像iterate思考currentGameObjects和它的石頭(Stone的實例)一樣。 另外一塊石頭可以有更多的字段與抽象類GameObject相比較的方法嗎?
只是好奇,爲什麼你需要轉換爲'Stone' /'Flower' /等?如果你的'HashMap'是'HashMap'',那麼投射到'GameObject'就足夠了...... –
你期待'currentGameObjects.put(name,(Stone)gameObj)';'over'currentGameObjects有什麼好處。放(名稱,(GameObject)gameObj);'?地圖的用戶仍然會將寶石視爲「GameObject」實例。 – Thomas
爲什麼你需要反思?爲什麼你不能簡單地解析和使用合適的構造函數? – arynaq