我遇到了问题..我有类似......
if(condition(TEST) == true){
something (NAME) = new something(this);
}
这是在循环中,其中有许多TEST变量被迭代通过。我不知道它们中有多少可能需要一个“(NAME)”变量,所以基本上我想知道如何让“动态”生成这些变量的名称?
谢谢!
答案 0 :(得分:8)
您确定不希望将结果存储在数组或集合中吗?
最接近的是使用Map
。随机生成String
或Integer
密钥,并将其用作Something
值的关键字。
// Before all
Map<String, Something> myMap = new HashMap<String, Something>();
// For each of these
if(condition(TEST) == true){
String name = "VAR" + Math.random() // Don't remember the syntax here
myMap.put(name, new something(this));
}
答案 1 :(得分:3)
除非我误解你的问题,否则你不需要这样做。
Java中的变量是词法范围的,因为它们仅针对它们所在的块进行定义。在循环的每次迭代中,您的name
参数将引用不同的对象,并且不会受先前循环中保存的值的影响。
因此,您只需要在循环中需要尽可能多的参数,因为您希望在循环中操作的属性(可能只有一个),这在所有情况下都是您在编写代码时可以确定的(在编译时)并且与TEST对象的(运行时)数量分开。
答案 2 :(得分:0)
如果你以后没有存储或引用它们,并且它们都是相同的类型,你可以对所有这些使用相同的变量:
// Outside loop ...
something $name;
// Inside loop ...
if(condition(TEST) == true){
$name = new something(this);
}
答案 3 :(得分:0)
在id中生成的最简单方法(例如对于Map)是使用AtomicInteger。
AtomicInteger counter = new AtomicInteger();
Map<String, Something> map = ...
String id = Integer.toString(counter.getAndIncrement(), 36);
map.put(id, new Something());
// later
Something s = map.get("0");
或者使用自然索引的List会更简单。
List<Something> list = ...
list.add(new Something());
// later
Something s = map.get(0);