我想定义一个ArrayList 的静态映射以包含成对的[key, ArrayList object]。
随着时间的推移,这些对会添加很多内容,但它们在每次执行期间都是固定的。所以最好的方法是在定义arrayList的映射时进行初始化。
我可以通过静态方法来做到这一点,包括:
arrayList.add("value1"),
arrayList.add("value2"),
arrayList.add("value3"),
...
然后:
map.put("key", arrayList)
但是,对于每对 [key, ArrayList],这些必须重复。
我尝试了 ImmutableMap,但出现了这个错误:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
at bugTriaging.Constants.<clinit>(Constants.java:11)
这是我的代码:
package package1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.google.common.collect.ImmutableMap;
public class Constants {
static final Map<String, ArrayList<String>> map1 = ImmutableMap.<String, ArrayList<String>>builder()
.put("key1", (ArrayList<String>) Arrays.asList("value1", "value2", "value3"))
.put("key2", (ArrayList<String>) Arrays.asList("value4", "value5", "value6", "value7"))
.put("key3", (ArrayList<String>) Arrays.asList("value8", "value9", "value10", "value11", "value12", "value13"))
.build();
public static void main(String[] args) {
System.out.println("Started ...");
}
}
我玩过静态值和最终值,但无法运行。
最后,我可以运行这段代码:
@SuppressWarnings("serial") //to avoid the warning.
public static HashMap<String, ArrayList<String>> map2 = new HashMap<String, ArrayList<String>>() {{
put("key1", new ArrayList<String>() {{
add("value1");
add("value2");
}});
put("key2", new ArrayList<String>() {{
add("value3");
add("value4");
add("value5");
}});
put("key3", new ArrayList<String>() {{
add("value6");
add("value7");
add("value8");
}});
}};
这是我的问题:
1- What is the problem of ImmutableMap in my first approach?
2- With my solution, I get warnings ("The serializable class does not declare a static final serialVersionUID field of type long"). Is adding @SuppressWarnings("serial") the right way of getting rid of warnings or there is a better way?
最佳答案
改变-
static final Map<String, ArrayList<String>> map1 = ImmutableMap.<String, ArrayList<String>>builder()
到
static final Map<String, List<String>> map1 = ImmutableMap.<String, List<String>>builder()
为什么??
Arrays.asList()
返回一个不同的 ArrayList
而不是 java.util.List
。返回的 ArrayList 是 Arrays
类中的静态内部类。
完成初始化:
static final Map<String, List<String>> map1 = ImmutableMap
.<String, List<String>> builder()
.put("key1", Arrays.asList(new String[] { "value1", "value2", "value3" }))
.put("key2", Arrays.asList(new String[] { "value4", "value5", "value6", "value7" }))
.put("key3",Arrays.asList(new String[] { "value8", "value9", "value10", "value11", "value12", "value13" })).build();
关于java - 初始化 ArrayList 的静态映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411503/