我需要初始化我在数组中收到的一些变量,如(例子):
private Map<Long, Object> var1 = null;
private Map<Long, Object> var2 = null;
private Map<Long, Object> var3 = null;
private List<Map<Long, Object>> vars = Arrays.asList(var1, var2, var3);
我想知道我是否可以这样做:
private void initializeVars() {
var1 = new HashMap<Long, Object>();
var2 = new HashMap<Long, Object>();
var3 = new HashMap<Long, Object>();
}
但是有这样的事情:
private void initializeVars() {
for (Map<Long,Object> var : vars) {
var = new HashMap<Long, Object>();
}
}
上面的代码不起作用,因为我只是将数组位置的指针从'var#'更改为新的HashMap,但我想要做的是访问'var#'并更改其指针。
答案 0 :(得分:0)
我想到的只有解决方案是将它打包成另一个轻量级对象,例如MyMap
。 MyMap
将实际地图保存在内部,然后您可以初始化该地图,如下所示:
private MyMap<Long, Object> var1 = new MyMap<>();
private MyMap<Long, Object> var2 = new MyMap<>();
private MyMap<Long, Object> var3 = new MyMap<>();
private List<MyMap<Long, Object>> vars = Arrays.asList(var1, var2, var3);
private void initializeVars() {
for (MyMap<Long,Object> var : vars) {
var.setInnerMap(new HashMap<Long, Object>());
}
}
它既丑陋又不好,但我现在没有看到任何不同的方式。在Java中你当然不可能用你的方式尝试。
答案 1 :(得分:0)
首先,您只会收到null
的列表,因此这可能只是一个int countVar = 3
,这将是相同的。
但是如果你想使用这个列表。
private void initializeVars() {
for (int i = 0; i < list.size(); ++i) {
list.add(new HashMap<Long, Object>());
}
}
但当然,var[1|2|3]
仍然是空的。
如果你想能够做逻辑,你需要一个包装器。请参阅Whatz answer了解
答案 2 :(得分:0)
你能得到的最接近的东西,适用于Java 8:
private Map<Long, Object> var1 = null;
private Map<Long, Object> var2 = null;
private Map<Long, Object> var3 = null;
private List<Consumer<Map<Long, Object>>> writers
= Arrays.asList(m -> var1=m, m -> var2=m, m -> var3=m);
private void initializeVars() {
for(Consumer<Map<Long,Object>> c: writers) {
c.accept(new HashMap<>());
}
}
此处没有字段引用,因为字段引用可以在两个方向上工作。在这里,我们只有Consumer
封装了为变量赋值的操作。对于初始化过程,这就足够了。