2013-03-16 25 views
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 2013-03-16 13:25:35

+3

如果我在这里每次都有四分之一的时间,请......请理解1)变量名不==对象名称,实际上对象没有名称,对象可以分配给更多比一个变量。 2)变量名对于正在运行的程序并不重要,而是最重要的是编写容易调试的易读代码。 3)所有意图和目的的变量名称在运行代码中都不存在。4)**是重要的是对象*引用*。 – 2013-03-16 13:29:04

回答

9

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

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

注意,我承担了更多的传统名称:Being而不是being

+1

好吧在我看来,我必须学习新的东西:)谢谢! – Syntic 2013-03-16 13:35:17

2

我可以用一个字符串作为一个对象的名字吗?

号通常的方式做到这一点是使用的List实现一个和对象添加到它,比如:

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

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

(我提倡使用静态对于你要解决的更大问题,几乎肯定会有更好的方法,但那是你提供的代码的最小修改。)

或者,你可以使用Map,实际上得到t他的名字你想("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()); 
    } 
} 

(相同的警告如前所述)

1

这不能通过这种方式实现。如果变量的名称是对你很重要,存储作为一个Map<String,being>

Map<String,being> map = new HashMap<String,being>(); 
map.put("b1", new being()); 
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++; 
} 

这是一个对象可以如何有一个名称。不要混淆对象和变量。

+0

到目前为止,这是最好的方法..回答他的问题 – Pragnani 2013-03-16 13:30:24

3

在你的代码中,你只是在函数“createbeing()”中创建了一个类对象的本地引用,并且上面声明的String“name”在参数“createbeing()名称“,你声明为类的对象的引用。