gpt4 book ai didi

java - 返回一个 ImmutableMap

转载 作者:太空狗 更新时间:2023-10-29 22:42:44 27 4
gpt4 key购买 nike

我有一个返回 map 的方法。我最初会返回方法生成的 HashMap,但认为返回 ImmutableMap 会更好。不幸的是,以下语句拒绝在 eclipse 中工作:

HashMap<File, File> map = new HashMap<File, File>();
map.put(...);
.
.
.
return ImmutableMap.builder ().putAll (map).build ();

它一直说我正在返回一个不兼容的语句,Map<Object, Object> .

我最初尝试使用:

return ImmutableMap<File, File>.builder ().putAll (map).build ();

但这显然行不通。我最好如何解决这个问题?我应该先把它存储在类似

的地方吗?
ImmutableMap<File, File> m = ImmutableMap.builder ().putAll (map).build ();

或者有更优雅的解决方案吗?

最佳答案

正确的语法是

return ImmutableMap.<File, File> builder().putAll(map).build();

请注意,点在泛型之前,因为泛型属于方法调用,而不属于类。

正如 Bozho 指出的那样,您需要在调用泛型方法时指定泛型类型。有时,如果编译器可以推断出它们,则您不需要这样做。但是类型推断非常有限,通常只适用于方法参数,例如 copyOf 方法:该方法是泛型的,但编译器可以从方法参数中推断出泛型类型。

更新: Gabriel 建议将语句分成多行,如下所示:

Builder<File, File> builder = ImmutableMap.builder();
builder.putAll(map);
return builder.build();

这避免了用显式类型参数来换取新的局部变量的需要,恕我直言,在这种情况下,这不会增加可读性。另一方面,如果多次添加到构建器,我更喜欢局部变量而不是长调用链。在只有一个 putAll 调用的特殊情况下,一个 copyOf 反而提供了在单行代码中避免类型参数的好处。

关于java - 返回一个 ImmutableMap <File, File>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6973618/

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