有 Java 编程相关的问题?

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

java为什么要编译带有泛型的代码?

这似乎是一个愚蠢的问题,但我现在被它绊倒了。这是为什么

import java.util.*;

public class Test {
        public static void main (String[] argv) throws Exception {
                Map<String,String> map = new HashMap<String,String>();
                map.get(new ArrayList<String>());
        }
}

使用与“字符串”不兼容的东西调用get不应该是违法的吗


共 (4) 个答案

  1. # 1 楼答案

    Map.get采用Object,而不是泛型类型,参见documentation

    get(Object key): Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.

    重要的是,它返回一个泛型类型,因此不必强制转换返回值

  2. # 2 楼答案

    用于Map^{}方法只接受Object,而不是泛型类型K

    代码将被编译,但永远不会从地图中得到任何东西

  3. # 3 楼答案

    Map的Javadocs中:

    V get(Object key)
    

    Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.

    get只是一个方法,它接收任何对象,并(如果存在)返回映射到该对象的对象。所以传递一个非字符串是合法的,但是,因为所有的键都必须是字符串,如果传递一个非字符串,那么总是会得到null