使用Map的方法“getOrDefault()”

时间:2015-06-27 12:57:52

标签: java spring-mvc generics

我希望从一个页面重定向到另一个页面并将其设置为模型时获取flashAttribute。我尝试使用此代码:

Map<String, ?> map = RequestContextUtils.getInputFlashMap(request);
if (map != null) {
    // this is redirect
    model.addAttribute("attr", map.getOrDefault("attr", false));
}

我有一个错误:

  

该类型的方法getOrDefault(Object,capture#3-of?)   映射不适用于参数   (String,boolean)

如何使用getOrDefault(“attr”,false)方法解决此问题?

2 个答案:

答案 0 :(得分:3)

您需要对地图进行未选中的转换:

Map<String, Object> map =
    (Map<String, Object>) RequestContextUtils.getInputFlashMap(request);

返回的地图类型中的通配符相当错误,它应该是Map<String, Object>

在这两种情况下,get(K)都会返回Object,但通配符会禁止?类型的方法作为参数,例如V中的put(K, V)。可能会污染地图内容的类型正确性。

问题是,这也会影响getOrDefault(K, V)等方法,而这些方法实际上并没有修改地图。

答案 1 :(得分:0)

对于通配符值,您可以简单地将map的调用中的getOrDefault强制转换为所需的值类型:

    model.addAttribute("attr", ((Map<String, Boolean>) map).getOrDefault("attr", false));