泛型类型参数有限,没有传递实数类型

bat*_*man 5 java generics

我遇到过这段代码:

 public static <K,V> HashMap<K,V> newHashMap() {
       return new HashMap<K,V>();
}
Run Code Online (Sandbox Code Playgroud)

我们可以使用它来创建一个实例HashMap,如下所示:

Map<String, List<String>> anagrams = newHashMap();
Run Code Online (Sandbox Code Playgroud)

现在的问题是newHashMap调用方法而不传递所需的类型(在本例中为its(String, List<String>)),但java仍在创建正确的类型.如何?

我在这里很困惑,如何K,V在代码左侧提到的类型中受到限制:

Map<String, List<String>>
Run Code Online (Sandbox Code Playgroud)

甚至没有传递:

newHashMap();
Run Code Online (Sandbox Code Playgroud)

Kon*_*kov 7

这称为类型推断.就是这样

Java编译器能够查看每个方法调用和相应的声明,以确定使调用适用的类型参数(或参数).推理算法确定参数的类型,如果可用,还确定分配或返回结果的类型.最后,推理算法试图找到适用于所有参数的最具体类型.

也可以看看:


Old*_*eon 6

这是因为它正确的类型.

将对象的泛型视为对象类型的一部分是一个常见错误.它不是.实际上,一旦编译完成,泛型就会被完全删除.这称为类型擦除.

A Map<String,String>实际上只是一个Map.该<String,String>部件仅供编译器使用,以确保您在代码中正确使用它.