zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    friend ---- public and private
    c++中const使用详解
    In c++ access control works on per-class basis not on per-object basis.
    realloc 用法
    enum don't allocate any memory
    (转)C++ STL中的vector的内存分配与释放
    计算机网络面试总结
    Redis安装与测试
    Hbase的安装与测试
    使用ActiveMQ实现简易聊天功能
  • 原文地址:https://www.cnblogs.com/luyu1993/p/7484012.html
Copyright © 2011-2022 走看看