3

Javaでクラスにジェネリック型を拡張させて、コードを介して渡される任意のクラスにメソッドを挿入できるようにすることは可能ですか?(または、Javaを使用して既存のクラスにメソッドを挿入またはオーバーライドする他の方法はありますか?)

「ジェネリック型を拡張する」とは、次のようなものです(クラス「Textends GameObject」はゲームに属し、変更できない可能性があり、実行時に(他のmodから)ゲームにロードされるため不明です)。

class GameObject {
    void moveForward(float amount) {
        this.camera.z += amount;
    }
}

class Extender<T extends GameObject> extends T {
    void onTick(float time) {
        this.camera.z -= amount;
    }
}

onTickはGameEngineによって呼び出されます。このようにして、既存のすべてのゲームオブジェクトを、ティックごとに逆方向に移動するバージョンに置き換えることができます。

4

2 に答える 2

8

いいえ。汎用スーパータイプを拡張することはできません。ジェネリック型 ( などpublic class MyClass<T> extends TheirClass<T>) を使用するクラスを拡張できますが、純粋なジェネリック型を拡張することはできません。

于 2013-01-25T15:49:42.987 に答える
0

私の意見では、解決策は言語の機能ではなく、デコレータまたはテンプレートメソッドパターンなどのデザインパターンで見つけることができます。

動作が実行時に決定される場合は、動作パターンを確認できます。

于 2013-01-25T16:09:19.910 に答える