java泛型

泛型的引入

集合中可以存放任意对象,只要把对象存储集合后,那么这时他们都会被提升成Object类型。
当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。比如下面程序:

    public class GenericDemo {
      public static void main(String[] args) {
        List list = new ArrayList();
        list.add("abc");
        list.add("itcast");
        list.add(5);//由于集合没有做任何限定,任何类型都可以给其中存放
                    //相当于:Object obj=new Integer(5);
        
        Iterator it = list.iterator();
        while(it.hasNext()){
          //需要打印每个字符串的长度,就要把迭代出来的对象转成String类型
          String str = (String) it.next();
          //String str=(String)obj; 
          //编译时期仅检查语法错误,String是Object的儿子可以向下转型
          //运行时期String str=(String)(new Integer(5))
          //String与Integer没有父子关系所以转换失败
          //程序在运行时发生了问题java.lang.ClassCastException
          System.out.println(str.length());
        }
      }
    }

泛型定义

JDK1.5 出现新的安全机制,保证程序的安全性
泛型: 指明了集合中存储数据的类型 <数据类型>
如果指明,在存储list.add(5)时出现编译错误
有了泛型才可以使用增强for循环,从而减少代码量
java中的泛型是伪泛型,因为只在编译时体现,class文件中没有泛型。(据说C++是真泛型)
ArrayList叫做带有泛型的类,其中 E 是一个变量,用来接受数据类型。
因此:泛型实现将运行时期的ClassCastException,转移到了编译时期变成了编译失败,避免了类型强转的麻烦。

泛型通配符:?

   public class GenericDemo {
    public static void main(String[] args) {
      ArrayList<String> array = new ArrayList<String>();
      
      HashSet<Integer> set = new HashSet<Integer>();
      
      array.add("123");
      array.add("456");
      
      set.add(789);
      set.add(890);
      
      iterator(array);
      iterator(set);
    }
    /*
     *  定义方法,可以同时迭代2个集合
     */
    public static void iterator(Collection<?> coll){
      Iterator<?> it = coll.iterator();
      while(it.hasNext()){
        //it.next()获取的是object类型
        System.out.println(it.next());
      }
    }
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值