这个Java语法中,看起来像方法有参数化的意思是什么?

4
这是我正在查看的代码 (使用谷歌的ImmutableMap)。
ImmutableMap.<String,String>of();

这是什么意思?做这个的意义是什么?
Class.<GenericType>methodName()?
2个回答

5

ImmutableMap是一个带有两个类型参数KV的通用类。在本例中,这个语法为这两个参数提供了具体的值,都是String

因此,上面的代码返回一个空的StringString的映射表。

参见JLS 15.2,其中包括方法调用:

MethodInvocation:
     TypeName . NonWildTypeArguments Identifier ( ArgumentListopt )

这里的类型参数是StringString


3

当类型推断无法工作时,它用于指定通用类型,例如:

Map<String, String> m = ImmutableMap.of();
Map<String, String> m2 = ImmutableMap.<String, String>builder().build();

它对方法返回值的泛型类型进行参数化。


很棒。这似乎几乎像是强制类型转换。这是否与Map<String,String> m2 = (Map<String,String>) ImmutableMap.builder().build()相同? - Jeremy
我现在没有IDE(或任何编辑器和JDK),但我认为它无法编译。 - Frank Pavageau
5
提供类型参数比使用泛型转换更好。泛型转换是没有意义的(ArrayList<String>ArrayList<Integer>是同一类,所以转换并没有捕获到这些不兼容的类型)。提供泛型类型可以让编译器在编译时确保类型安全。 - Dunes
@FrankPavageau 我相信未经参数化的语句将被允许编译。如果它无法推断类型参数,它将返回一个原始的 Map,你可以进行强制转换(出于向后兼容性的原因)。但你是正确的,你不能将一个参数化类型强制转换为另一个。 - Dunes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接