如何将元素添加到 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);
(实际上,Serializable
是 String
和 Integer
的更具体的通用超类;是否是更好的值类型取决于您)
试试这个
HashMap<String,Object> map =new HashMap<>();
map.put("sss", "str");
map.put("sss", 1);
如何将字符串和整数值同时添加到 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);
(实际上,Serializable
是 String
和 Integer
的更具体的通用超类;是否是更好的值类型取决于您)
试试这个
HashMap<String,Object> map =new HashMap<>();
map.put("sss", "str");
map.put("sss", 1);