在String之后命名对象

时间:2013-02-05 19:27:12

标签: java

我有一个创建对象并将其添加到HashMap中的方法,但我需要一种方法来命名对象,以便可以多次调用此方法而不会使对象发生冲突。

public create(String s){
HashMap<String, Level> list = new HashMap;
Level level1 = new Level(); //Right here I need to name this object somehow so its different every time the method is called
list.put(s, level1);
}

由于对象被添加到HashMap,我不在乎它的名字。有没有办法在字符串后命名这个对象?

5 个答案:

答案 0 :(得分:1)

在我看来,你并不知道java中变量的范围规则。在方法中声明变量时,此变量是局部变量。方法结束时将其丢弃。这意味着

    每次调用方法时,
  1. level1都是一个新变量
  2. list也将被丢弃。因此,每次调用该方法时都会创建一个新的hashmap,之后会被丢弃。
  3. 如果希望变量“存活”到方法的末尾,则必须在方法之外声明它。在我看来,您希望使用list但不能使用level

    class LevelManager {
    
        private HashMap<String, Level> list = new HashMap<>();
    
        public void createLevel(String s){
            Level level = new Level();
            list.put(s, level);
        }
    
        // some more methods which get the level instances from 
        // list or do something with them
    }
    

答案 1 :(得分:0)

只需使用计数器(int)并调用String.valueOf()将其转换为String。使用该字符串作为名称并递增计数器,以便下一个名称将是唯一的。

答案 2 :(得分:0)

为什么不这样做?

public create(String s){
   HashMap<String, Level> list = new HashMap;//I am assuming this exists outside, you
                                            //don't need to create a new HashMap each time.
   list.put(s, new Level());
}

答案 3 :(得分:0)

我想我明白你的暗示,这意味着你不理解重要的东西:变量的名称是无关紧要的。

除了创建原始类型(您应该使用new HashMap<String, Level>();)之外,您的代码不需要像我想象的那样进行更改。虽然创建的HashMapLevel对象在方法结束时都会消失,因为它们超出了范围。

所以你的方法基本上“什么都不做”。

答案 4 :(得分:0)

这是不可能的。

但是如果你想要一张某个键对应几个对象的地图,为什么不把一个列表放到地图中呢?

public create(String s){
HashMap<String, List<Level>> list = new HashMap;
Level level1 = new Level(); //Right here I need to name this object somehow so its different every time the method is called
list.get(s).add(level1);
}