gpt4 book ai didi

Java 泛型 : cannot convert into

转载 作者:行者123 更新时间:2023-12-02 10:56:46 24 4
gpt4 key购买 nike

使用 Java 10.0.2+13、Gradle 4.9 和 Guava 26.0-jre 构建以下代码会输出此错误:

错误:

argument mismatch; bad return type in method reference

Iterator<Entry<String,ImmutableMap<Path,String>>>

cannot be converted to

Iterator<Entry<? extends String,? extends ImmutableMap<Path,String>>>

代码:

final Map<String, Map<Path, String>> m = new HashMap<>();

// put entries into m

final ImmutableMap<String, ImmutableMap<Path, String>> im =
ImmutableMap.<String, ImmutableMap<Path, String>>copyOf(
m.entrySet().stream().map(
e -> immutableEntry(
e.getKey(),
ImmutableMap.copyOf(e.getValue())
)
)::iterator
)
;

为什么String & ImmutableMap<Path,String>不满足? extends String & ? extends ImmutableMap<Path,String> ,分别?

如何才能正确编译它?

最佳答案

也许这并不能直接回答您的问题,但使用 Collector 不是一个选择吗?

像这样:

ImmutableMap<String, ImmutableMap<Path, String>> im = m.entrySet().stream()
.collect(ImmutableMap.toImmutableMap(
Map.Entry::getKey, e -> ImmutableMap.copyOf(e.getValue())
));
<小时/>

编辑:就像好奇心一样,这会让您的代码进行编译(但是使用收集器 -version ,它比下面的代码更加清晰):

ImmutableMap<String, ImmutableMap<Path, String>> im = ImmutableMap.copyOf(
m.entrySet().stream()
.<Map.Entry<? extends String, ? extends ImmutableMap<Path, String>>>map(e -> immutableEntry(e.getKey(), ImmutableMap.copyOf(e.getValue())))
::iterator
);

关于Java 泛型 : cannot convert <X> into <? 扩展 X>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51670314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com