zoukankan      html  css  js  c++  java
  • Java中的泛型

    通配符是什么

    <?>
    指的是Object及其子类,也就是所有Java对象

    泛型是什么

    1. <E>:Element (容器中的元素,如集合)
    2. <T> :Type(Java 类)
    3. <K>:Key(键)
    4. <V>:Value(值)
    5. <N> :Number(数值类型)
    6. <S>、<U><A> 、<B> ….

    声明泛型

    <T>
    声明一个泛型类或者泛型方法 
    示例:

    使用泛型

    <?>
    使用一个泛型类或者泛型方法 
    示例:

    1 public static ResultDTO<?> entity(int code,Object... data) {
    2     ResultEnum resultEnum = ResultEnum.getEnum(code);
    3     if(0==data.length) {
    4         return new ResultDTO<ResultEnum>(resultEnum);
    5     }else{
    6         return new ResultDTO<Object>(resultEnum,data);
    7     }
    8 }

    通配符之边界

    为什么通配符要加边界

    为了解决容器中存储的元素不能是该基类(父类)的子类

    上界通配符

    关键字:extends
    禁止做插入操作,只做读取
    最大只能是该基类父类)的子类

    下界通配符

    关键字:super
    最小只能是该子类,不能是该类的子类 
    无法确定存入类型,可以插入操作,而无法读取操作
    Apple 继承 FruitFruit 继承 Food

     1 public static ResultDTO<? super Fruit> entity(int code,Object... data) {
     2     ResultEnum resultEnum = ResultEnum.getEnum(code);
     3     if(0==data.length) {
     4         return new ResultDTO<Food>(resultEnum);
     5     }if(1==data.length) {
     6         return new ResultDTO<Fruit>(resultEnum);
     7     }else{
     8         return new ResultDTO<Apple>(resultEnum,data);//报错
     9     }
    10 }

    报错

    Type mismatch: cannot convert from ResultDTO<Apple> to ResultDTO<? super Fruit>
    

    PECS原则

    Producer Extends Consumer Super原则

    1. extends 推荐读操作
    2. super 推荐写操作

    1. 声明泛型不能用无边界通配符<?>
    2. 上界<? extends T>不能往里存,只能往外取
    3. 下界<? super T>不影响往里存,但往外取只能放在Object对象里
  • 相关阅读:
    Linux内存地址映射
    江湖行
    数组/指针/const/字符串常量的使用传值问题
    TI davinci DM6467通过串口0将UBL和u-boot写入NAND flash
    CCS5配置使用GenCodecPkg生成CODEC SERVER
    typedef用法和与define的区别
    VS2008项目移植到Linux
    bootargs中ip段各项解释
    Davinci-DM6467板子-外围器件的I2C地址的疑惑解答
    MFC中界面自适应
  • 原文地址:https://www.cnblogs.com/aishangJava/p/10119337.html
Copyright © 2011-2022 走看看