将一个新对象命名为字符串?

6

我希望有一种方法可以创建一个类的对象,并自动为第一个对象命名为"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++;
    }

}

10
你应该解释为什么想要这样做,因为很可能你并不真正需要这么做。 - assylias
3
如果我能得到每次在这里被问到这个问题的25美分,...... 请理解:1)变量名并不等于对象名,事实上对象没有名字,并且可以分配给多个变量。2)变量名对程序的运行并不重要,它的主要重要性在于编写易于调试的人类可读代码。3)就执行代码而言,变量名几乎不存在。4)真正重要的是对象的引用 - Hovercraft Full Of Eels
5个回答

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

3

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


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());
    }
}

(与上述相同的注意事项。)

2

为你的类(应该命名为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++;
}

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

到目前为止,这是回答他问题的最好方式。 - Pragnani

1
这种方式无法实现。如果变量名对您很重要,请将其作为Map<String,being>的键存储。
Map<String,being> map = new HashMap<String,being>();
map.put("b1", new being());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接