2

基本クラスがBaseあり、それがサブクラスSubAであるとしSubBます。

public class Base(){

    public (static?) Animation anim;

    public Base(Frame[] frames){

        CpuIntensiveAnimationCreation(frames);

        // I need only one 'instance' of Animation Per subclass.
        // Every different TYPE of subclass needs it's own Animation instance.
        // A subclass can share one Animation, among multiple subclass-instances. (static?)

    }

作成するサブクラスのインスタンスごとに新しい Animation インスタンスを初期化したくありません。かなりの時間がかかるからです。ただし、すべてのサブクラスに独自のアニメーションが必要です。
もちろん、サブクラスごとに静的なアニメーションを作成し、スーパークラスを使用しないこともできますが、それには多くの冗長/コピーされたコードが必要になります。

どうすればこれにたどり着くことができますか?

4

5 に答える 5

3

クラス/サブクラスの一部にしないでください。持っている方がはるかに簡単です

Map<Class<? extends Base>, Animation>

独自のクラスとしてアニメーション レジストリを作成し、クラスのアニメーションへのマッピングを含めます。

于 2012-07-04T19:21:33.337 に答える
2

私の提案はgetAnimation()、基本クラスに抽象メソッドを持つことです。

サブクラスは、このメソッドをオーバーライドして、サブクラスごとに静的なアニメーションを返すことができます。

于 2012-07-04T19:19:28.060 に答える
1

したがって、記述したアニメーションを保持するには、サブクラスに静的フィールドが必要です。

ここで、コードを複製したくないので、アニメーションを生成するメソッドを Base クラスの静的メソッドに配置できます。

それはあなたの質問に答えていますか?

于 2012-07-04T19:19:25.383 に答える
1

でどうですかBase

インスタンスを取得するコンストラクターを作成し、Subclass通常の構築チェックの代わりに、アニメーション プロパティがあるかどうかを確認し、呼び出されていない場合は、クラスに対して静的に初期化する関数を確認しますか? の抽象メソッドから継承できます。Base

これにより、責任が逆転し、Base クラスが再びアニメーションを担当するようになります。

于 2012-07-04T19:19:32.890 に答える
0

1. Base クラスでgetAnim() のようなアニメーションを取得するための抽象メソッドを作成します。

2.すべての SubclassでAnimation を静的にし ます。これにより、Single サブクラスのすべてのインスタンスが同じ Animation インスタンスを共有します。したがって、これを行うことで、すべてのクラスが独自のアニメーションを持つようになります。

于 2012-07-04T19:22:25.330 に答える