为什么这个Java代码不会产生任何编译器错误?
Map<String, String> m = new HashMap<String, String>();
m.get(1);
我尝试在地图中找到一个将字符串映射到字符串的整数。这显然是编程错误。
同样,此代码也不会产生错误:
Map<Integer, String> m = new HashMap<Integer, String>();
m.get("dd1");
因此Java编译器似乎没有检查Map.get(Object)方法的参数类型。有什么想法吗?
答案 0 :(得分:4)
Java编译器似乎没有检查Map.get(Object)方法的参数类型。
当然可以。它检查它是Object.
没有别的东西可以检查。唯一可能存在“无效类”的方法是使用基本类型。
答案 1 :(得分:3)
Map
interface get
方法将Object
作为参数。
两种情况都没有错误。唯一的问题是它必须是一个Object,如果equals方法满足于传递的Object,那么该值将返回。
答案 2 :(得分:2)
m.get(Object);
参数对地图中的任何对象类型都有效。所以这不会给你编译错误。
答案 3 :(得分:0)
通常在插入时检查。在put
方法中。
当map
中没有插入错误数据,然后在使用get
方法获取数据时无需检查
答案 4 :(得分:0)
正如您在(Java-Map)的文档中看到的那样,get方法不使用泛型注入,而是使用Object作为输入参数。因此,您将在运行时获得ClassCastException。这与使用泛型类型注入的put方法不同。
答案 5 :(得分:-1)
它会检查你的put动作和返回值(public V get(Object key)),而不是所有动作。