0

のオブジェクトが複数ありますclass A。これらのオブジェクトはゲームで使用されるテクスチャであるため、用途を示す固有の名前が付けられています。ex) bttnDoor bttnPause bttnExit bttn.... だから私はそれらを配列として作りたくありません (配列があったとしても、ループを使ってそれらを初期化できます)。

私は試した

a = b = c = new Object();しかし、これらは可変であるため、すべて同じオブジェクトを指しています。

それらを明確に初期化する唯一の方法は

a = new Ob...


b = new Ob...


c = new Ob...

ただし、ハード コーディングの合唱団は、開発が進むにつれて指数関数的に拡張されます (より多くのテクスチャ)。

特徴的なオブジェクトで複数のオブジェクトを初期化する簡単な方法はありますか?

4

4 に答える 4

1

いいえ。newキーワードがないと、の を作成できませんinstanceclass

于 2013-04-29T06:16:18.857 に答える
1

タイプを使用しenumます。列挙型には、この特定の目的に役立つ構文があります。

すべてのテクスチャに継承されたタイプを実装させることができます。次に、次のようにします。

public enum Textures {
    TEXA (new TextureA()),
    TEXB (new TextureB());
    //...

    private Texture s;
    public Texture getTexture() {return s;}

    Textures(Texture s) {this.s = s;}
}

これで問題が直接解決されるわけではありませんが、問題を直接解決する方法はありません。別の解決策として、テクスチャの配列を使用することもできますが、それはやや面倒です。

列挙型の詳細については、こちらをご覧ください。

于 2013-04-29T06:18:38.717 に答える
1

IOC コンテナーを使用すると、これをより簡単に行うことができます。

または、以下のようなファクトリ メソッドを使用して変数を初期化することもできます。

public static void initializeObjects(Object... params){
   for(Object obj:params){
    obj=new Object();
   }
}

それを呼び出すのは簡単です

Object a;
Object b;
Object c;

initializeObjects(a,b,c);

編集 :

実際、これは機能しません。このような単純な見落としをお詫び申し上げます。これは、新しく作成されたインスタンスが元の変数に反映されないためです。

これは、Java がオブジェクト参照を値で渡すためです。したがって、元の宣言は引き続き を指しnullます。

@Telthien この一連の思考を始めてくれてありがとう。

ただし、OPの質問で、彼は次のスニペットを持っていたことを指摘させてください

a = b = c = new Object();

これにより、オブジェクトの作成には初期化パラメーターの変更が含まれず、私の答えが間違っていると信じるようになりました..

于 2013-04-29T06:22:52.860 に答える
1

反射を使用してみることができます。お勧めしませんが、問題は解決します。

import java.lang.reflect.Field;

public class Example {

    Integer f1;
    String f2;
    Example f3;

   public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
         Example obj = new Example();
         for (Field f : Example.class.getFields()) {
            f.set(obj,  f.getType().newInstance());
         }
   }
 }

編集:さまざまなタイプを持つ可能性を高めました

于 2013-04-29T06:25:06.367 に答える