如何在同一时间将字符串和int值添加到HashMap?
HashMap<String,?> map =new HashMap<>();
map.put("sss", "str");
map.put("sss", 1);
Android SharedPreferences.getAll()
方法是如何做到的?
错误消息
Found 'java.lang.String', required: '?'
答案 0 :(得分:1)
您无法向null
添加任何内容(文字Map<String, ?>
除外),因为它可能是错误的类型。例如:
Map<String, Long> longMap = ...;
Map<String, ?> wildcardMap = longMap;
wildcardMap.put("", ""); // Compiler error!
// but if it did work, the following would be a runtime error:
Long value = longMap.values().iterator().next();
请注意,?
是? extends Object
的简写;首字母缩写词PECS告诉你extends
是制作者而不是使用者的东西。因此,您无法在其实例上调用使用者方法(除非您传递null
)。
如果要将异构值放入映射中,则值类型必须是类型的公共超类。
Map<String, Object> mapForBoth = ...
mapForBoth.put("key1", "string");
mapForBoth.put("key2", 1);
(实际上,Serializable
是String
和Integer
更具体的常见超类;由您决定是否为更好的值类型
答案 1 :(得分:0)
试试这个
HashMap<String,Object> map =new HashMap<>();
map.put("sss", "str");
map.put("sss", 1);