zoukankan      html  css  js  c++  java
  • java 深入技术五 (泛型)

    1.泛型概述

    泛型的本质:参数化类型

     定义

    Object obj=new Object();//并不是所有类都可以使用泛型

    List <String> list=new ArrayList<String>();//在后面加上类型

    2.泛型的声明和使用

    使用<T>表示泛型

    List<E>

    声明泛型,使用泛型

    泛型语法:声明类的同时声明泛型<T>,表示一个参数化类型,在声明类变量和实例化对象时,需要给泛型参数传递一个具体的类型值

    Class Demo<T>{

    Demo <String> demo=new Demo<String>();

    这种参数类型可以声明在类,接口和方法的定义中,分别称为泛型类,泛型接口,泛型方法

    使用泛型的步骤:1.定义泛型类2.使用泛型类

    好处:安全 把运行时异常提前到编译期

    好处:简单 不需要进行显示类型转换

    向后兼容 List list=new ArrayList<String>();是正确的

    泛型不协变:List <Object>list=new ArrayList<String>();是不正确的

    3. 集合和泛型的绝配

    集合中的所有类都定义了泛型,都支持泛型操作

    希望在实际使用时,可以指定为特定的类型

     4. 泛型的其他特点

    泛型的向后兼容:List list=new ArrayList<String>();

                           list.add(1);

                          list.add("wo");

    注意:如果两边都声明了泛型,泛型类型必须一致

             可以一端有一端没有

             泛型的决定权在变量这边,在左边

    泛型两边不支持继承关系

     List<Object> list=new ArrayList<String>();

     5.有限制泛型extends

    类型通配符<?>可以用来给<T>赋值,表示任意类型

    有限制泛型:在声明泛型的时候,给这个泛型可以接受的类型值一个约束,比如

    class Deme<T extends Number>{} 表示Demo类只能操作数值类型的对象,如 Integer,Double

    <T extends Collection> extends 指定Colletion 是上限

    <? super Student > super 指定Student是下限

    <? extends Colletion> 类型通配符和限制泛型合作,使得可以使addAll方法将Collection<Integer>的内容

    6.有限制泛型和通配符的配合使用

     当你使用泛型明确规定了List里面可以添加元素的类型,如果再添加其他类型的元素,编译器会报错

    实例化对象.泛型得相同
      // demo = new Demo<String>();

    // T只能接受Number及其子类
      Demo3<Integer> demo3 = new Demo3<Integer>();

    当通配符和有限制泛型配合使用时,可以使变量接受更多类型参数泛型的变量

    /有泛型通配符时,不能调用和泛型有关的方法

    Demo3<? extends Number> demo4=new Demo3<Number>();
      demo4=new Demo3<Integer>();
      demo4=new Demo3<Double>();

    //demo4.show(new Integer(1));

    如果在声明变量时,没有使用泛型,默认为Number;上限

    //泛型通配符和有限制泛型结合使用,常用在方法声明中,常用在方法的参数上

     7. 有限制泛型super

    1.super,不可以在泛型声明中使用,可以喝通配符配合使用

    2.super指定了变量可以接受对象的泛型的下现,本身或者父类

    3. super可以调用和泛型有关的方法,方法的参数就是下现

  • 相关阅读:
    驱动开发之基本
    Bitmap文件格式+生成一个BMP文件
    PPP 转义字符 编码 和 解码
    数组数据整体按位左移或右移一位
    一个assert的写法
    c++11 右值引用 && std::move()
    openMP一小时初探
    linux命令学习_实验楼(一)
    50 行 Python 代码完成图片转字符
    LFW精确度验证__c++双线程读写txt
  • 原文地址:https://www.cnblogs.com/shiyeyeyeye/p/5036689.html
Copyright © 2011-2022 走看看