有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有无效类的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编译器似乎不会检查要映射的参数的类型。获取(对象)方法。有什么想法吗


共 (6) 个答案

  1. # 1 楼答案

    正如您在(Java-Map)的文档中所看到的,get方法不使用泛型注入,而是使用对象作为输入参数。因此,您将在运行时得到ClassCastException。这与使用泛型类型注入的put方法不同

  2. # 2 楼答案

    Map接口get方法将Object作为参数

    这两种情况都没有错误。唯一的问题是它必须是一个对象,如果equals方法对传递的对象满意,那么该值返回

  3. # 3 楼答案

    它将检查put操作和返回值(public V get(Object key)),而不是所有操作

  4. # 4 楼答案

    这里的m.get(Object);参数对地图中的任何对象类型都有效。所以这不会给你带来编译错误

  5. # 5 楼答案

    Java compiler does not seem to check the type of the argument to Map.get(Object) method.

    当然了。它检查它是一个Object.没有其他需要检查的东西。存在“无效类”的唯一方法是使用基元类型

  6. # 6 楼答案

    通常在插入时进行检查。在put方法中

    如果在map中没有插入错误的数据,则在使用get方法获取数据时无需进行检查