JAVA泛型

case回顾

1 public void fun1(){
2   HashMap<Integer,String> map = new HashMap<>();
3   fun2(map);     
4 }
5 public void fun2(Map map){
6   map.put("我是字符串不是数值","awful");  
7 }

这里省略了main方法,我们发现第六行是可以正常执行的。是不是很奇怪。而且执行之后,我去从map中取数据(我以为key是int的 结果怎么都取不到 发现存的是一个String类型的key  心好累)

后来参考这篇博文 http://blog.csdn.net/lonelyroamer/article/details/7868820

找到了问题的原因,根源就在java的泛型上。

类型检查就是针对引用的,谁是一个引用,用这个引用调用泛型方法,就会对这个引用调用的方法进行类型检测,而无关它真正引用的对象

 1 public class Test10 {
 2     public static void main(String[] args) {
 3         
 4         //
 5         ArrayList<String> arrayList1=new ArrayList();
 6         arrayList1.add("1");//编译通过
 7         arrayList1.add(1);//编译错误
 8         String str1=arrayList1.get(0);//返回类型就是String
 9         
10         ArrayList arrayList2=new ArrayList<String>();
11         arrayList2.add("1");//编译通过
12         arrayList2.add(1);//编译通过
13         Object object=arrayList2.get(0);//返回类型就是Object
14         
15         new ArrayList<String>().add("11");//编译通过
16         new ArrayList<String>().add(22);//编译错误
17         String string=new ArrayList<String>().get(0);//返回类型就是String
18     }
19 }

这个例子和上面那个例子一样,这是很多人都容易踩到的坑。

posted @ 2017-09-06 11:59  丨核桃牛奶  阅读(154)  评论(0编辑  收藏  举报