zoukankan      html  css  js  c++  java
  • Java——泛型集合

      Java 集合有一个缺点——把一个对象 “丢进” 集合里之后,集合就会 “忘记” 这个对象的数据类型,当再次取出该对象时,该对象的编译类型就变成了 Object 类型(其运行时类型没变)。集合对元素类型没有任何限制,这样可能引发一些问题。例如,想创建一个只想保存Dog 对象的集合,但程序也可以轻易的将字符串类型数据“丢” 进集合当中。

    Dog ououDog=new Dog("欧欧","雪纳瑞");
            
    Dog yayaDog=new Dog("亚亚","拉布拉多");
            
    List list = new ArrayList();
            
    list.add(ououDog);
    list.add(yayaDog);
    list.add("李小龙");
    list.add("成龙");
            
    for (Object object : list) {
        Dog dog=(Dog)object;
        System.out.println(dog.getName());
    }

       

      行运上面的代码会发现,List 集合只知道它盛装的是Object,要想得到Dog 对象当中的数据时,只能通过强制类型转换,但是这个 List 集合当中存储的不光有 Dog 对象,还有字符串的数据类型,在输出的时候会发生异常  java.lang.ClassCastException, 那么这么解决这种问题呢?

    List<Dog> list = new ArrayList<Dog>();
        
    list.add(ououDog);
    list.add(yayaDog);
            
    //list.add("李小龙");    //这行代码将引起编译错误,因为 list 对象只可以存储 Dog 对象 啊·
            
    for (Dog dog : list) {
        System.out.println(dog.getName());
    }

      上面程序成功创建了一个特殊的List集合,这个集合当中只能保存 Dog 对象,不能保存其它类型对象。创建这种特殊的集合方法是:在集合接口、类后增加尖括号,尖括号里放一个数据类型或对象,即表明这个接口、集合类只能保存特定类型对象,创建 List 对象的时候,指定 list不是任意的 List,而是一个 Dog 对象类型的 List,写作 List<Dog>。可以称为List是带一个类型参数的泛型接口。在创建ArrayList 对象时也指定了一个类型参数。而且,当遍历的时候也不需要强制转换类型。避免发生异常。

  • 相关阅读:
    cf #363 c
    cf #363 b
    cf #363 a
    跑rbgirshick的fast-rcnn代码
    改文件夹名称
    cmake安装
    argparse模块
    which,whereis,locate,find
    FastRCNN 训练自己数据集 (1编译配置)
    视觉一般的面试问题
  • 原文地址:https://www.cnblogs.com/szj-ang/p/7382977.html
Copyright © 2011-2022 走看看