Java ::轻松初始化多个静态对象

时间:2013-04-29 06:13:56

标签: java initialization

我有多个class A对象。 由于这些物体是游戏中使用的纹理,因此它们具有表明其用途的独特名称。 ex)bttnDoor bttnPause bttnExit bttn .... 所以我不想把它们变成数组(即使我有一个数组,我也可以使用循环来初始化它们。)

我试过

a = b = c = new Object();但由于它们是可变的,它们都指向同一个对象。

似乎是区别地初始化它们的唯一方法是

a = new Ob...


b = new Ob...


c = new Ob...
然而,随着开发的进展(更多纹理),硬编码的合唱团会以指数方式扩展。

是否有更简单的方法来初始化具有独特对象的多个对象?

4 个答案:

答案 0 :(得分:1)

号码没有new关键字,无法创建instance的{​​{1}}。

答案 1 :(得分: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;}
}

虽然这不能直接解决您的问题,但无法直接解决您的问题。另一个解决方案可能是使用纹理数组,但这将是相当混乱的。

详细了解枚举类型here

答案 2 :(得分: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感谢您启动我的思路。

但是,请允许我指出,在OPs问题中,他有以下片段

a = b = c = new Object();

这使我相信对象创建不涉及任何更改的初始化参数,导致我的错误答案..

答案 3 :(得分: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());
         }
   }
 }

编辑: 我已经增强了它可能有不同的类型