1

私は抽象クラスを持っています。それを「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 を持つことができますか?

4

1 に答える 1