为什么java泛型允许在get中为HashMap传递布尔值<integer,string>

时间:2017-03-23 08:15:27

标签: java generics hashmap autoboxing

HashMap<Integer, String> hashMap = new HashMap<>();
hashMap.put(1, "aaa");
hashMap.put(2, "baa");
hashMap.put(3, "caa");
System.out.println(hashMap.get(false));

上面的代码编译并运行正常..输出为null

我想要了解的是,我之间似乎错过了任何自动装箱。因为如果在编译时应用泛型,get方法不允许我们在那里传递布尔值。

由于

4 个答案:

答案 0 :(得分:2)

HashMap的get方法定义为public V get(Object arg0) {。 这意味着您可以将任何对象作为参数。该方法不使用泛型,因此编译器不会检查参数。

您可以在这里找到javadoc

答案 1 :(得分:0)

mao imnplementation的源代码是以 Object 作为参数,所以你基本上可以像任何你想要的那样传递param ...

data.frame

和HashMap

igraphs

因此,如果您将另一个实例作为参数,则该方法将返回 null

答案 2 :(得分:0)

/MDget方法的签名是

public class HashMap<K,V>

它不是通用的。因此,它不仅仅是get(Object key) ,您可以传递任何对象,它会提供一些输出(如果它不存在,则为boolean

我认为您将此签名与

混淆
null

如果是这种签名,那么您的操作将不被允许。

答案 3 :(得分:0)

Map.get不是通用方法。这样它就保持了与前仿制药Java的可比性。如果它是通用的,保持兼容性将需要删除旧方法(因为所有类型都匹配Object导致编译器的歧义)。