在字符串后命名一个新对象?

时间:2013-03-16 13:24:25

标签: java

我希望有一个方法可以创建类的对象,并为第一个对象自动命名为"b1",为第二个对象自动命名为"b2",依此类推。我可以使用String作为新对象的名称吗?如果有可能,我该怎么做?

class being {
    static int count = 0;
    String name;

    void createbeing(){
        name = "b" + Integer.toString(count);
        being name = new being(); //Here I want to insert the String name as the name of the object
        count++;
    }

}

5 个答案:

答案 0 :(得分:9)

不,这在Java中是不可能的;你不能在运行时创建变量。但是,您可以维护一个Map,将String个标识符映射到相应的Being。即。

Map<String, Being> map = new HashMap<String, Being>();
...
name = "b" + Integer.toString(count);
map.put(name, new Being());
count++;

请注意,我假设了一个更传统的名称:Being而不是being

答案 1 :(得分:3)

在您的代码中,您只是在函数“createbeing()”中创建类对象的本地引用,并且上面声明的String“name”通过引用“name”隐藏在“createbeing()”函数范围中“你宣称是作为阶级对象的参考。

答案 2 :(得分:2)

  

我可以使用字符串作为对象的名称吗?

没有。通常的方法是使用List实现之一并将对象添加到其中,例如:

class being{
    static List<being> beings = new LinkedList<being>();

    void createbeing(){
        beings.add(new being());
    }
}

(我提倡使用静态的生物列表。对于你试图解决的更大问题几乎肯定有更好的方法。但这是代码的最小模式你提出了。)

或者,您可以使用Map并实际获取所需的名称("b1"等):

class being{
    static int count = 0;
    static Map<String,being> beings = new HashMap<String,being>();

    void createbeing(){
        count++;
        beings.add("b" + count, new being());
    }
}

(与上述相同的警告。)

答案 3 :(得分:2)

为您的类添加名称属性(应该命名为Being,BTW,而不是being),并为其构造函数添加:

public class Being
    private String name;

    public Being(String name) {
        this.name = name;
    }
}

然后创建对象:

void createBeing(){
    name = "b" + Integer.toString(count);
    Being being = new Being(name);
    // TODO: do something with the Being object
    count++;
}

这就是一个对象如何拥有一个名字。不要混淆对象和变量。

答案 4 :(得分:1)

这不可能通过这种方式实现。如果变量名称对您很重要,请将其存储为Map<String,being>

的键
Map<String,being> map = new HashMap<String,being>();
map.put("b1", new being());