我想定义一个静态的Map of ArrayList,用于包含一堆[key,ArrayList object]对。这些对在执行期间会有很多添加,但它们在每次执行期间都是固定的。因此,最好的方法是在定义arrayList映射时进行初始化。
我可以通过一个包括静态方法的方式来实现这一点:
然而,这些操作必须针对每个 [key, ArrayList] 对重复执行。 我尝试使用 ImmutableMap,但出现了以下错误:
这是我的代码:
我可以通过一个包括静态方法的方式来实现这一点:
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- 我第一次尝试使用ImmutableMap时遇到了什么问题?
2- 使用我的解决方案后,我收到了警告(“可序列化类未声明类型为long的静态final serialVersionUID字段”)。添加@SuppressWarnings("serial")是消除警告的正确方法,还是有更好的方法?
com.google.common.collect.ImmutableMap;
这是一个 GWT 项目吗? - Braj