尝试getOrDefault for Map,如:
String test = map.getOrDefault("test", "")
但它给了我一个错误“必需?但得到了一个字符串”。无论如何要解决这个问题?
答案 0 :(得分:2)
Map<String, ?>
的值可以是任何类型。
getOrDefault
要求第二个参数与值的类型相同;除null
之外没有任何其他值可以满足此要求,因为您不知道?
是String
,Integer
还是其他任何内容。
因为您只是从地图中检索一个值,所以可以安全地转换为Map<String, Object>
:
Object value = ((Map<String, Object>) map).getOrDefault("key", "");
这是因为您没有在地图中添加任何值,这会使以后的呼叫变得不安全;并且任何值类型都可以安全地存储在Object
引用中。
答案 1 :(得分:0)
如果找不到(AKA null),此方法的实现将返回给定的默认值(泛型 - 可以是任何类型)。
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}
附加的文档链接:https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#getOrDefault-java.lang.Object-V-