Java回顾-泛型

一、为什么用泛型

1. 解决元素存储的安全性问题, 好比商品、 药品标签, 不会弄错。

2. 解决获取数据元素时, 需要类型强制转换的问题, 好比不用每回拿商品、 药品都要辨别。

         在集合中使用泛型的例子:

ArrayList<Integer> list = new ArrayList<>();

 二、自定义泛型

1.自定义泛型类/接口

        1、在自定义class中也可以使用泛型,但实例化时一般要指明类的泛型

        2、static 方法中不能使用类的泛型,因为Static方法加载实例化得早。

        3、异常类不能是泛型的

        4、不能使用new E[ ]。但是可以: E[ ] elements = ( E[ ] )new Object[i];

        5、若父类有泛型,则子类可以选择保留泛型也可以选择指定泛型类型。子类除了指定或保留父类的泛型,还可以增加自己的泛型。

//自定义泛型类
class order<T>{
    private T orderT;
    private String desc;

    public order(T orderT, String desc) {
        this.orderT = orderT;
        this.desc = desc;
    }
    ... ...
}

//子类保留泛型
class subOrder extends order1<String>{

    public subOrder(String orderT, String desc) {
        super(orderT, desc);
    }
}

//子类增加泛型
class subOrder1<A> extends order{

    public subOrder1(A orderA, String desc) {
        super(orderA, desc);
    }
    
}

2.自定义泛型方法

        -泛型方法的泛型参数与的泛型参数没有关系。其所属类不一定非要是泛型类

        -泛型方法在调用时指定泛型参数的类型

        -泛型方法可以声明为static的,因为泛型参数是在调用方法时确定的,而非实例化时确定。

         格式:[访问权限] 返回类型 方法名([泛型标识 参数名称]) 抛出的异常

class subOrder1<A> extends order1{

    public subOrder1(A orderA, String desc) {
        super(orderA, desc);
    }
    public <T> List<T> GenericMethod(T list){
        System.out.println("这是泛型方法");
        return null;
    }
}

三、泛型继承性的体现

        如果B是A的一个子类型(子类或者子接口),而G是具有泛型声明接口G<B>并不是G<A>子类型! 比如:StringObject的子类,但是List<String>并不是List<Object>的子类。它们并列关系

        -若A是B的父类,则A<G> 是 B<G> 的父类,如 List<String> 与 ArrayList<String>

 四、通配符

1、通配符的使用

        通配符:?

        A是B的父类,G<A>和 G<B> 没有关系,二者共同的父类是:G <?>

                例如:List<?>List<String>List<Integer>等各种泛型List的父类

        对于G<?>,不能向其内部添加数据,除了null;允许读取数据,数据类型为Object

2、有限制条件的通配符的使用

        1.<?>允许所有泛型的引用调用

        2.通配符指定上限

                上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口,即<=

                         <? extends A> (无穷小 , A]       只允许泛型为 A 及 A 的子类的引用调用

        3.通配符指定下限

                下限super:使用时指定的类型不能小于操作的类,即>=

                         <? super A>  [A , 无穷大)         只允许泛型为 A 及 A 父类的引用调用

        

         <? extends Comparable>        只允许泛型为实现Comparable接口的实现类的引用调用

3、注意点

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值