这个Java语法看起来像是参数化的,它意味着什么?

这个Java语法看起来像是参数化的,它意味着什么?,java,generics,Java,Generics,下面是我正在查看的代码(使用Google的ImmutableMap) ImmutableMap.of(); 这是什么意思?这样做的意义是什么 Class.<GenericType>methodName()? Class.methodName()? 是一个泛型类,具有两个类型参数,K和V。该语法给出了这两个参数的具体值,在本例中,这两个参数都是String 因此,上面返回一个String到String的空映射 看看其中哪一个说方法调用是 MethodInvocation:

下面是我正在查看的代码(使用Google的ImmutableMap)

ImmutableMap.of();
这是什么意思?这样做的意义是什么

Class.<GenericType>methodName()?
Class.methodName()?
是一个泛型类,具有两个类型参数,
K
V
。该语法给出了这两个参数的具体值,在本例中,这两个参数都是
String

因此,上面返回一个
String
String
的空映射

看看其中哪一个说方法调用是

MethodInvocation: TypeName . NonWildTypeArguments Identifier ( ArgumentListopt ) 方法调用: 打字名。非WildTypeArguments标识符(ArgumentListopt)
这里的类型参数是
String
String

当类型推断不起作用时,它用于指定泛型类型,例如:

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

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

Cool。这看起来就像是在铸造。这是否与Map m2=(Map)ImmutableMap.builder().build()相同?我现在手头没有IDE(或任何编辑器和JDK),但我认为它无法编译。不,提供类型参数比一般类型转换更好。泛型强制转换是没有意义的(
ArrayList
ArrayList
是同一个类,因此强制转换不会捕捉到这些类型是不兼容的)。提供泛型类型允许编译器在编译时确保类型安全。@FrankPavageau我相信将允许编译非泛型语句。它将返回一个原始的
映射
(如果它无法推断类型参数),您可以强制转换该映射(出于向后兼容性的原因)。但您是正确的,不允许将一个参数化类型强制转换为另一个参数化类型。
Map<String, String> m = ImmutableMap.of();
Map<String, String> m2 = ImmutableMap.<String, String>builder().build();