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不应该是违法的吗
# 1 楼答案
Map.get
采用Object
,而不是泛型类型,参见documentation重要的是,它返回一个泛型类型,因此不必强制转换返回值
# 2 楼答案
用于} 方法只接受
Map
的^{Object
,而不是泛型类型K
代码将被编译,但永远不会从地图中得到任何东西
# 3 楼答案
从Map的Javadocs中:
get只是一个方法,它接收任何对象,并(如果存在)返回映射到该对象的对象。所以传递一个非字符串是合法的,但是,因为所有的键都必须是字符串,如果传递一个非字符串,那么总是会得到null
# 4 楼答案
见this 还有this