如何在 Java 中定义具有多个值类型的 HashMap?
How can I define a HashMap with multiple value types in Java?
我当前的 HashMap 具有以下结构,对我来说工作正常。
Map<String, List<MyClass>> data = new HashMap<String, List<MyClass>>() {{
put("correct", new ArrayList<MyClass>());
put("incorrect", new ArrayList<MyClass>());
}}
尽管如此,我想将一个字符串添加到同一个HashMap。我已经尝试了以下方法,但是当我想向 ArrayList 中添加新元素时它会导致错误。
Map<String, Object> data = new HashMap<String, Object>() {{
put("correct", new ArrayList<MyClass>());
put("incorrect", new ArrayList<MyClass>());
put("filestring", new String());
}}
错误:
class java.util.ArrayList cannot be cast to class java.util.Set (java.util.ArrayList and java.util.Set are in module java.base of loader 'bootstrap')
我尝试将新元素添加到 ArrayList 的方式:
((Set<List<MyClass>>) data.get("correct")).add((List<MyClass>) new MyClass());
有谁知道我怎样才能达到上述目标?我非常感谢任何形式的帮助,干杯!
您为密钥“正确”存储的内容是 new ArrayList<MyClass>()
:
put("correct", new ArrayList<MyClass>());
但是在读回它时,您尝试将其转换为 (Set<List<MyClass>>)
,但这是行不通的。
稍后以类似的方式尝试强制转换 (List<MyClass>) new MyClass()
,这也会失败。
要添加新元素,您需要编写
((List<MyClass>) data.get("correct")).add(new MyClass());
我当前的 HashMap 具有以下结构,对我来说工作正常。
Map<String, List<MyClass>> data = new HashMap<String, List<MyClass>>() {{
put("correct", new ArrayList<MyClass>());
put("incorrect", new ArrayList<MyClass>());
}}
尽管如此,我想将一个字符串添加到同一个HashMap。我已经尝试了以下方法,但是当我想向 ArrayList 中添加新元素时它会导致错误。
Map<String, Object> data = new HashMap<String, Object>() {{
put("correct", new ArrayList<MyClass>());
put("incorrect", new ArrayList<MyClass>());
put("filestring", new String());
}}
错误:
class java.util.ArrayList cannot be cast to class java.util.Set (java.util.ArrayList and java.util.Set are in module java.base of loader 'bootstrap')
我尝试将新元素添加到 ArrayList 的方式:
((Set<List<MyClass>>) data.get("correct")).add((List<MyClass>) new MyClass());
有谁知道我怎样才能达到上述目标?我非常感谢任何形式的帮助,干杯!
您为密钥“正确”存储的内容是 new ArrayList<MyClass>()
:
put("correct", new ArrayList<MyClass>());
但是在读回它时,您尝试将其转换为 (Set<List<MyClass>>)
,但这是行不通的。
稍后以类似的方式尝试强制转换 (List<MyClass>) new MyClass()
,这也会失败。
要添加新元素,您需要编写
((List<MyClass>) data.get("correct")).add(new MyClass());