Kotlin泛型的型变之路

2023-11-09

 一:JAVA泛型的协变

简而言之,协变就是,如果A是B的子类,那么Generic<A>就是Generic<? extends B>的子类型。

协变指的是,当参数具有父子关系时,子类可以作为参数传递,而泛型的上界就是其父类。

JAVA泛型的协变通过上界通配符<? extends 父类型>

  • 「?」通配符表示这是一个未知类型

  • 「extends」上界通配符表示这个类型只能是其子类或者本身 Button TextView

上界通配符还有一个特例,那就是「?」,例如List<?>,实际上就是List<? extends Object>的缩写。在Kotlin中,使用的是「*」,即List<*>,实际上就是List<out Any>

二:JAVA泛型的协变的限制:泛型类型只能对外提供数据,不能写入数据

List<? extends TextView>的类型定义是<? extends TextView>,编译器并不知道这个元素 textViews.get(0)具体是什么类型(可能是TextView及其子类),所以这个元素不能添加到List集合里

List<? extends TextView> textViews = new ArrayList<TextView>();
TextView textView = textViews.get(0);
// Error 泛型集合List 并不知道元素textViews.get(0)是什么具体类型所以不能添加到泛型集合里去
textViews.add(textView);

三:JAVA泛型的逆变

简而言之,逆变就是,如果A是B的子类,那么Generic<B>就是Generic<? super A>的子类型。

逆变指的是,父类可以作为参数传递,但子类必须是其下界。

JAVA泛型的逆变通过下界通配符<? super 子类型>来实现。

  • 「?」通配符表示这是一个未知类型

  • 「super」下界通配符表示后面的这个类型,只能是它子类或者本身

四:JAVA泛型的逆变的限制

不能读指的是不能读取为指定的类型,而不是不能调用读的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin泛型的型变之路 的相关文章

随机推荐

  • sql server服务器物理内存满,解决内存不足问题

    解决内存不足问题 12 21 2017 本文内容 适用于 SQL Server 所有支持的版本 SQL Server 内存中 OLTP 相比 SQL Server 随着需求的不断增加 为 内存中 OLTP 安装和分配的内存量可能会不足 这时
  • 需求分析之矩阵分析法

    如何划分优先级 理解需求 矩阵分析法 理解需求 什么是需求 需求就是用户对目标软件系统的功能 行为 性能 设计约束等方面的期望 什么是需求分析 需求分析是一个发现需求到定义需求的一个过程 矩阵分析法 需求分析李的矩阵分析法主要帮助产品人员用
  • Qt 模型视图编程之增删行列

    背景 Qt 模型视图编程中模型定义了标准接口对数据进行访问 可根据需求继承对应的抽象模型类来实现自定义的数据模型 一个基本的数据模型至少要实现以下虚函数 rowCount 行数 返回要显示多少行 columnCount 列数 返回要显示多少
  • slf4j中的MDC

    一 slf4j中MDC是什么 slf4j除了trace debug info warn error这几个日志接口外 还可以配合MDC将数据写入日志 换句话说MDC也是用来记录日志的 但它的使用方式与使用日志接口不同 在使用日志接口时我们一般
  • 简易多元线性回归学习

    目录 多元线性回归 一 问题分析 二 数据预处理 excel 1 数据清洗 2 数据全数值化 三 使用EXcel回归 回归实现 回归分析 四 使用代码实现回归 Statsmodels 1 数据处理 2 绘制热力图探讨价格与其他之间的联系 3
  • ceph安装部署

    Ceph 简介 存储基础 单机存储设备 单机存储的问题 分布式存储的类型 分布式存储 软件定义的存储 SDS Ceph 架构 Ceph 核心组件 编辑 Pool中数据保存方式支持两种类型 OSD 存储后端 Ceph 数据的存储过程 Ceph
  • 灰度发布是什么?

    在如今的互联网时代 大厂都是采用灰度发布的策略进行应用线上部署的 如果身在小公司的测试同学想进入大厂 那么灰度发布就是大家必须要了解的知识点了 希望通过本文能够帮助大家快速的理解什么是灰度发布 并让大家了解研发 运维 测试 运营是如何在这一
  • pnpm与npm和yarn的区别

    作为一名前端程序员 对npm和yarn这两个包管理器一定不陌生 那么你听说过pnpm么 它到底是个什么东西 和npm还有yarn有什么区别 又有什么作用呢 本文就将解决以下这几个问题 pnpm是什么 有什么作用 pnpm有什么优势和特点 p
  • 国产中标麒麟系统-docker安装

    背景 中标麒麟的 华为国产机器 需要安装docker 但是在线安装老是失败 可能操作不对 离线安装可以的 不管怎么样 安装成功就是目的 系统架构是aarch64 如果你是其他系统架构 按照这个步骤离线安装是可以的 不过安装包需要换一下相应路
  • Spring 事务管理

    http www redsaga com spring ref 2 0 html transaction html transaction declarative 9 1 简介 Spring框架引人注目的重要因素之一是它全面的事务支持 Sp
  • 如何不让访问php文件路径,防止别人通过路径查看你的模板文件方法汇总nginx篇...

    为了防止别个盗取你辛苦的模板 做一个安全防护还是有必要的 之前的一篇已经介绍了apache下如何禁止的办法 这一篇将介绍nginx下的方法 通过nginx一般都是通过配置文件nginx conf配置来禁止用户访问的 1 禁止访问corefr
  • Excel大数据量单元格快速填充

    个人简介 一个从会计转行数据分析师的三旬老汉 擅长领域 数据分析 数据仓库 大数据 博客内容 平时会将自己工作中遇到的问题进行归纳总结 分享给各位小伙伴 意在帮助大家少加班 不掉发 让我们相互学习 一起进步 文章目录 前言 一 填充 一 编
  • C51教程 第三个51程序:数码管显示

    keil proteus 第三个51程序 让数码管循环显示0 9 这是一个AT89c51单片机教程 我们每次都会提供博文教程以及附带资料下载 单片机就是一个小型CPU 在电子领域应用广泛 电视 冰箱 洗衣机 空调等产品中都能见到他们的身影
  • 【C语言】让你不再害怕指针——C指针详解(经典,非常详细)

    目录 前言 复杂类型说明 一 细说指针 1 指针的类型 2 指针所指向的类型 3 指针的值 或者叫指针所指向的内存区或地址 4 指针本身所占据的内存区 二 指针的算术运算 三 运算符 和 四 指针表达式 五 数组和指针的关系 六 指针和结构
  • GPT专业应用:如何让GPT策划方案

    身为一名职场打工人 或多或少会面临需要写策划案的难题 不管是策划一场线下活动 还是策划业务发展的方向 甚至到生活中还需要策划婚礼 策划房屋装修 策划和朋友的聚会等等 那么如何快速积累经验 找准方向便成为了不可或缺的技能 在这里 我们将介绍如
  • python输出最长字符串_使用Python打印最长的字母子字符串,并打结...

    我将通过以下方式解决该问题 gt 让我们定义两个字符串 当前字母递增的字符串和当前最长的字符串 gt 两个字符串都以第一个字母初始化 这样我们就可以随时阅读他们的最后一封信 gt 然后遍历输入字符串s 从第二个字符开始 gt 如果当前字符c
  • 合并两个有序单链表(Java)

    思想 准备两个链表l1和l2 判断是否有链表为空 如果l1为空 则不用比较直接返回l2 如果l1为空 则直接返回l2 比较l1和l2节点 选出最小的那个节点 将该节点设为合并后的链表的head 头 节点 同时将指向该节点的l1或l2后移 方
  • 广告投放算法:受众行为分析与人群定向

    引言 物以类聚 人以群分 这句古语不仅揭示了物与人的自组织趋向 更隐含了 聚类 和 人群 之间的内在联系 例如在现代数字广告投放系统中 最为关键的 人群定向 功能正是通过 聚类 算法得以实现的 如果您厌倦了隔靴搔痒的空大宣传 不妨就随笔者一
  • 微信支付服务端开发总结

    原文链接 http blog csdn net baple article details 68059283 前言 最近应公司业务需求 把微信支付完成了 当然已经顺利上线 但是开发的过程是也是踩了很多坑 下面我就先说说开发流程 以及在开发中
  • Kotlin泛型的型变之路

    一 JAVA泛型的协变 简而言之 协变就是 如果A是B的子类 那么Generic a 就是Generic 实际上就是List a