map泛型 map不指定泛型 与 Map<Object,Object>的区别

map泛型 map不指定泛型 与 Map<Object,Object>的区别



private void viewDetail(){
	Map map1 = new HashMap();
	Map<String,Object> map2 = new HashMap<String,Object>();
	Map<Object,Object> map3 = new HashMap<Object,Object>();
	Map<String,String> map4 = new HashMap<String,String>();
	test1(map1);
	test1(map2);
	test1(map3);	//编译错误
	test1(map4);	//编译错误
}

private void test1(Map<String,Object> map){
}

在泛型这里 Object 就只表示Object 不能表示所有对象

因为泛型是保证编译时你给的实际类型和参数声明的类型一致,它的意义就在于此,不需要解释,这是需要你学习的规则而已。

那为什么map1就可以呢,这里有历史原因,因为泛型是后加入的,早期的版本没有,但是java的开发者希望不能因为加入泛型就要修改成千上万的现有应用,所以默认他可以通融老版本不加泛型的变量,但是编译时一定会有提示你有危险代码的。

正因为这样,泛型非常的好破,随便写点代码就可以让编译通过,而运行时错误,所以现在开发,一定要使用一种代码,千万不要两者都用,那样太危险,如果你用了泛型,就全部都用,切记切记

posted @ 2018-12-04 20:18  学不死的程序员  阅读(9655)  评论(0编辑  收藏  举报