JavaSe基础(25)-- 泛型

泛型

引子
    ArrayList al = new ArrayList ();

    al.add("abc"); 
    al.add("hahah");
    al.add(4); 

    Iterator it = al.iterator();
    while(it.hasNext()){

        String str = (String)it.next();
        System.out.println(str);
    }
  • 当调用某一类型自身特有的方法的时候就会出现异常

    .....
    while(it.hasNext()){
    
        String str = (String)it.next();
        System.out.println(str.toUpperCase());
     }
    
  • 那么怎么办,只有程序员主观控制。我们实际开发是面向接口的开发。

  • 那么,自己的程序,可以可以控制,可是,对方不知道你具体要什么数据啊。
  • 所以,在编译的时候是通过的,但是一运行就会出现异常。
  • 在jdk1.5提出了解决方案。怎么办呢?

    是不是应该在定义容器的时候,明确容器里面要放的数据类型。

    ArrayList<String> al = new ArrayList<String>();
    al.add("abc");//public boolean add(Object obj)
    al.add("hahah");
    //al.add(4);// 编译时会检测类型,提示错误。
    ...
    
概述
  • 泛型: jdk1.5出现的安全机制。约定了集合中元素的数据类型
  • 好处: 将运行时期的问题ClassCastException转到了编译时期。
常见符号
E         Elements   类或接口
T         Type       代表具有指定类型,并可以进行特有操作
K         Key
V         Value

?        Object     不进行特有操作的时候
  • 其实他们都是Object类型
泛型限定问题
  • 限制了类型的上界

    A  extends B   C extends B     B extends D   
    <? extends T>  表示限制了类型的上界,表示参数化类型的可能是T 或是 T的子类
    <? extends B>   ?  代表的是只能使用B或B的子类 ===B A  C 
    
  • 限制了类型的下界

    A  extends B    B extends C    D extends A
    <? super T>      表示限制了类型下界,表示参数化类型可能是T 或是 T父类,直至Object
    <? super A>    ? 代表的是只能使用A或A的父类  ==>A B  C          
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值