当前位置: 首页 > news >正文

Kotlin泛型: 协变|逆变|不变

引言

无论java 通配符上限还是下限,都多少存在缺陷,要么存不安全,要么取不安全。而kotlin就解决这个问题。让out 纯输出, 让in纯输入。

java这块知识: java泛型的协变、逆变和不变-CSDN博客

协变

生产者out T  协变    【out T 此泛型能够被获取 读取 所以是out】

例子:

class   Producer<out T>{

// out T 代表整个生产者类里面 这个 T 只能被读取 ,不能修改 。

// 不能被修改(编译不通过)

fun consumer (item : T){} //  这里报错。

// 只能被读取

fun producer() : T {}

}

逆变

消费者 in T 逆变 【in T 此泛型只能被修改 更新所以是 in】

例子:

class  Consumer <in T>{

        //只能被修改

        fun comsumer(item : T){} // 消费代码

        //不能被读取

        fun producer() : T{} //编译不通过        

}

不变

// 生产者和消费者 T。默认情况下是 不变

能读取 能修改 。

http://www.dtcms.com/a/90684.html

相关文章:

  • mysql慢查询日志
  • Python - 爬虫-网页抓取数据-工具wget
  • ngx_http_core_root
  • Vue 中 v-if 和 v-show 的区别
  • 如何设计有效的用户反馈闭环机制
  • 微信小程序面试内容整理-如何优化小程序的启动速度?
  • 人工智能通识速览
  • 基于Spring Boot的消防物资存储系统的设计与实现(LW+源码+讲解)
  • deepseek实战教程-第五篇支持deepseek的大模型应用安装及使用
  • 基于 SGLang 部署 Qwen2.5 7B 模型
  • 正点原子内存管理学习和修改
  • Linux深度解析运行级别管理
  • 自动插入分号机制
  • ElementUI el-menu导航开启vue-router模式
  • C语言 - 整数与浮点数运算的类型转换规则
  • 定时器(java)
  • Linux安装MySQL数据库并使用C语言进行数据库开发
  • 【从零实现Json-Rpc框架】- 项目设计篇
  • C语言指针(二)
  • 有哪一些解放生产力的AI工具【前端】
  • GAMES101-现代计算机图形学入门(Assignment5)
  • 练习:自动驾驶
  • Linux中的基本开发工具(上)
  • 系统与网络安全------网络应用基础(3)
  • 图解CNN、RNN、LSTM
  • 【杂谈】-人工智能驱动的编码:提升效率还是增加网络安全隐患?
  • c++ primer 阅读手记 第三章
  • js中async+await+promise的用法及常见问题总结
  • Linux多线程详解
  • Docker镜像相关命令(Day2)