• 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 }

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

  • 相关阅读:
    如何将Superset嵌入后台系统之实践
    如何将Superset嵌入后台系统之实践
    SQL server添加链接服务器脚本
    面试题:JQuery有几种选择器?
    数据库增加索引
    Mybatis与Ibatis比较
    jQuery 选择器
    Form 和 Input 对象
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/luyu1993/p/7484012.html
Copyright © 2020-2023  润新知