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 }
这个例子和上面那个例子一样,这是很多人都容易踩到的坑。
才能这种东西 本来就是靠自己挖掘创造的 我也不是什么天才 我只是比任何人都拼命工作 一步一个脚印走过来了 等我回头一看 背后没有一个身影 那帮懒惰的人在山脚念叨着 谁叫那家伙是天才 开什么玩笑 我最讨厌悠哉悠哉长大的慢性子 比我有时间 有精力 感情丰富的人 为什么比我懒惰 那就给我啊 要把这些东西都浪费掉的话 就通通给我 我还有很多很多想创造的东西 给我啊--------摘自《legal high II》 与诸君共勉