我使用给定代码获得以下编译错误 -
lamba表达式中的错误返回类型:Map<字符串,设置< PARAM>>能够 不能转换为Map<字符串,列表<地图<字符串,对象>>>
我根本没有线索为什么会出现这个错误。由于mapToReturn和dummyMap属于同一类型。
Map<String, Set<Param>> mapToReturn = Optional.ofNullable(CACHE.get(content, (key) -> {
hit.set(false);
Map<String, List<Map<String, Object>>> rawMap = Paser.parse(Map.class, key);
Map<String, Set<Param>> dummyMap = new HashMap<>();
for (Map.Entry<String, List<Map<String, Object>>> entry : rawMap.entrySet()) {
dummyMap.put(entry.getKey(), entry.getValue()
.stream()
.map(this::mapToParam)
.collect(Collectors.toSet()));
}
return dummyMap;
})).orElseThrow(() -> new ParamParserException("... "));
答案 0 :(得分:1)
CACHE.get
的签名肯定很重要,这就是您收到此错误的原因。我试图重现这个问题。考虑与您的问题相关的部分代码:
Map<String, Set<Param>> aMap = Optional.ofNullable(CACHE.get(content, (key) -> {
//...
Map<String, Set<Param>> dummyMap = new HashMap<>();
//...
return dummyMap;
})).orElseThrow(() -> new ParamParserException("... "));
如果CACHE.get
的签名如下,则此代码将编译:
static class CACHE
{
static Map<String, Set<Param>> get(String content, Function<String, Map<String, Set<Param>>> func)
{
return ...;
}
}
现在让我们改变签名:
static class CACHE
{
static Map<String, Set<Param>> get(String content, Function<String, Map<String, List<Map<String, Object>>>> func)
{
return ...;
}
}
此操作失败,并显示以下错误:
lambda表达式
Map<String,Set<Param>>
中的错误返回类型不能 转换为Map<String,List<Map<String,Object>>>
这正是你得到的错误。 Paser.parse
的签名不是原因,因为错误消息会有所不同。