私は抽象クラスを持っています。それを「GameObjects」と呼び、「Stone」のような多くの子クラスと呼びましょう。実行時に Xml ファイルを解析して、作成する必要があるゲームオブジェクト (「ストーン」など) とそれらに関する追加情報について読みます。特定の GameObject を作成するには、次のようなリフレクションを使用します。
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);
今、私は GameObject を HashMap< String, GameObject> に入れたいと思っています。しかし、これは機能しません:
currentGameObjects.put(name, gameObj);
明らかに、gameObj は典型的なオブジェクトです。何が機能するかは次のようなものです:
currentGameObjects.put(name, (GameObject)gameObj);
しかし、私は実際に次のようなものが必要です
currentGameObjects.put(name, (Stone)gameObj);
問題は、実行時に石か花か虹か何かわからないと言ったようなものです....
どうすればそれを達成できるか、または良い回避策はありますか?
編集:ここで複雑なことを考えているのかもしれません。しかし、基本的に私の考えはそうでした。ゲームオブジェクトを含むマップを作成するには、反復処理を実行できます。したがって、たとえば、currentGameObjects を反復処理するように考えることができ、そのストーン (ストーンのインスタンス) がスムーズに実行されます。また、A Stone は、抽象クラス GameObject と比較して追加のフィールド Methods を持つことができますか?