如何将元素添加到 Java 通用通配符列表

How to add element to Java Generic Wildcard List

如何将字符串和整数值同时添加到 HashMap?

HashMap<String,?> map =new HashMap<>();
map.put("sss", "str");
map.put("sss", 1);

Android SharedPreferences.getAll() 方法如何做到这一点?

错误信息

Found 'java.lang.String', required: '?'

您不能向 Map<String, ?> 添加任何内容(文字 null 除外),因为它可能是错误的类型。例如:

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 的 shorthand;首字母缩略词 PECS 告诉您 extends生产者,而不是 消费者。因此,您不能在其实例上调用 consumer 方法(除非您传递 null)。

如果要将异构值放入映射中,值类型必须是这些类型的公共超类。

Map<String, Object> mapForBoth = ...
mapForBoth.put("key1", "string");
mapForBoth.put("key2", 1);

(实际上,SerializableStringInteger 的更具体的通用超类;是否是更好的值类型取决于您)

试试这个

 HashMap<String,Object> map =new HashMap<>();
 map.put("sss", "str");
 map.put("sss", 1);