这似乎是一个愚蠢的问题,但此刻我正在绊倒它。为什么这会编译?
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>());
}
}
使用与“String”不兼容的东西调用get不应该是非法的吗?
答案 0 :(得分:3)
来自Map的Javadoc:
V get(Object key)
返回值的值 指定的键是映射的,如果是,则为null 此地图不包含地图 键。
get只是一个接收任何对象的方法,并且(如果存在)将返回映射到它的对象。因此,传递非字符串是合法的,但是,因为所有键必须是字符串,所以如果传入非字符串,则总是为null。
答案 1 :(得分:1)
答案 2 :(得分:1)
Map
的{{3}}方法只需Object
,而不是通用类型K
。
代码将编译,但永远不会从Map中获取任何内容。
答案 3 :(得分:1)
Map.get
采用Object
,而不是通用类型,参见documentation。
get(Object key)
:返回指定键映射到的值,如果此映射不包含键的映射,则返回null。
重要的是它返回一个泛型类型,因此您不必转换返回值。