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