getOrDefault for Map <string,?=“”>

时间:2017-06-09 20:01:06

标签: java

尝试getOrDefault for Map,如:

String test = map.getOrDefault("test", "")

但它给了我一个错误“必需?但得到了一个字符串”。无论如何要解决这个问题?

2 个答案:

答案 0 :(得分:2)

Map<String, ?>的值可以是任何类型。

getOrDefault要求第二个参数与值的类型相同;除null之外没有任何其他值可以满足此要求,因为您不知道?StringInteger还是其他任何内容。

因为您只是从地图中检索一个值,所以可以安全地转换为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-

相关问题