我有一个创建对象并将其添加到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,我不在乎它的名字。有没有办法在字符串后命名这个对象?
答案 0 :(得分:1)
在我看来,你并不知道java中变量的范围规则。在方法中声明变量时,此变量是局部变量。方法结束时将其丢弃。这意味着
level1
都是一个新变量list
也将被丢弃。因此,每次调用该方法时都会创建一个新的hashmap,之后会被丢弃。如果希望变量“存活”到方法的末尾,则必须在方法之外声明它。在我看来,您希望使用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>();
)之外,您的代码不需要像我想象的那样进行更改。虽然创建的HashMap
和Level
对象在方法结束时都会消失,因为它们超出了范围。
所以你的方法基本上“什么都不做”。
答案 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);
}