6

I want to have a method that will create an object of the class being and automatically name it "b1" for the first object, "b2" for the second, and so on. Can I use a String as the name of a new object? If it's possible, how do I do it?

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++;
    }

}
4

5 回答 5

9

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

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

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

于 2013-03-16T13:26:26.140 回答
3

在您的代码中,您只是在函数“createbeing()”中创建类对象的本地引用,并且上面声明的字符串“name”被您的引用“name”隐藏在“createbeing()”函数范围内声明为类存在对象的引用。

于 2013-03-16T13:50:49.127 回答
2

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

不。通常的方法是使用其中一种List实现并向其中添加对象,例如:

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

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

(我提倡使用静态的生物列表。几乎可以肯定,对于您要解决的更大问题,有更好的方法。但这是您提供的代码的最小模式。)

或者,您可以使用 aMap并实际获得您想要的名称("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());
    }
}

(与上述相同的警告。)

于 2013-03-16T13:25:51.183 回答
2

将 name 属性添加到您的类(应命名为Being、顺便说一句,而不是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++;
}

这就是对象可以有名称的方式。不要混淆对象和变量。

于 2013-03-16T13:28:50.833 回答
1

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

Map<String,being> map = new HashMap<String,being>();
map.put("b1", new being());
于 2013-03-16T13:28:19.540 回答