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对象里
  • 相关阅读:
    创建Hive/hbase相关联的表异常
    CDH5.2+CM5.2+impala2+Spark1.1 集群搭建基础环境准备
    【JavaWeb】(10)微信公众号开发进阶
    Ambari-stack介绍
    OSGi中的ServletContext
    笔试面试1 用C实现C库函数itoa, atoi
    SGU 114. Telecasting station 三分or找中位数
    face++实现人脸识别
    磁盘接口与磁盘扫描
    CSDN开源夏令营 百度数据可视化实践 ECharts(4)
  • 原文地址:https://www.cnblogs.com/aishangJava/p/10119337.html
Copyright © 2011-2022 走看看