kotlin基础学习笔记第九章——泛型

news2024/9/24 9:27:44

        实化类型参数允许你在运行时的内联函数中引用作为类型实参的具体类型(对普通的类和函数来说,这样行不通,因为类型实参在运行时会被擦除)

         声明点变型可以说明一个带类型参数的泛型类型,是否是另一个泛型类型子类型或者超类型,它们的基础类型相同但类型参数不同。例如,它能调节是否可以把List<Int>类型的参数传给期望List<Any>的函数。使用点变型在具体使用一个泛型类型时做同样的事,达到和java通配符一样的效果。

     一、泛型类型参数

       泛型允许你定义带类型形参的类型。当这种类型的实例被创建出来的时候,类型形参被替换成称为类型实参的具体类型。例如,如果有一个List类型的变量,弄清楚这个列表中可以存储哪种事物是很有意义的。类型形参可以准确清晰地进行描述,就像这样“这个变量保存了字符串列表”,而不是“这个变量保存了一个列表”。kotlin说明“字符串列表”的语法和java看起来一样:List<String>。还可以给一个类声明多个类型形参。例如,Map类型就有键类型和值类型两个类型形参:class Map<K, V>。我们可以用具体的类型实参来实例化它:Map<String, Person>。目前,所有概念都和java没什么不一样。

        和一般类型一样,Kotlin编译器也常常能推导出类型实参

val authors = listOf("Dmitry", "Svetlana")

         因为传给listOf函数的两个值都是字符串,编译器能推导出你正在创建一个List<String>。另一方面,如果你想创建一个空的列表,这样就没有任何可以推导出类型实参的线索,你就得显式地指定它(类型实参)。就创建列表来说,既可以选择在变量声明中说明泛型的类型,也可以选择在创建列表的函数中说明类型实参。参看下面的例子:

        1、泛型函数和属性

        如果要编写一个使用列表的函数希望它可以在任何列表(通用的列表)上使用,而不是某个具体类型的元素的列表,需要编写一个泛型函数。泛型函数有它自己的类型参数。这些类型形参在每次函数调用时都必须替换成具体的类型实参

        大部分使用集合的库函数都是泛型的。来看看slice函数:这个函数返回一个只包含在指定下标区间内的元素。

         接收者和返回类型用到了函数的类型形参T,它们的类型都是List<T>。当你在一个具体的列表上调用这个函数时,可以显式地指定类型的实参。但大部分情况下你不必这样做,因为编译器可以推导出类型。

        这两次调用的结果都是List<Char>。编译器把函数返回类型List<Char>中的T替换成了推导出来的类型Char。

        再来看看filter函数的声明,它接收了一个函数类型(T)-> Boolean的参数。

         这个例子中自动生成的lambda参数it的类型是String。编译器必须把它推导出来:毕竟,在函数声明中lambda参数是泛型类型T。编译器推断T就是String,因为它知道函数应该是list<T>上调用,而它的接收者readers的真实类型是List<String>。

        

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是MySQL插入意向锁?

Insert Intention Lock&#xff0c;中文我们也称之为插入意向锁。 这个可以算是对我们之前所讲的 Gap Lock 的一个补充&#xff0c;关于 Gap Lock&#xff0c;如果还有小伙伴不懂&#xff0c;可以参考&#xff1a;记录锁、间隙锁与 Next-Key Locks。 1. 为什么需要插入意向锁…

吃透Chisel语言.40.Chisel实战之单周期RISC-V处理器实现(下)——具体实现和最终测试

Chisel实战之单周期RISC-V处理器实现&#xff08;下&#xff09;——具体实现和最终测试 上一篇文章中我们对本项目的需求进行了分析&#xff0c;并得到了初步的设计&#xff0c;这一篇文章我们就可以基于该设计来实现我们的单周期RISC-V处理器了。实现之后也必须用实际代码来…

[ 数据结构 -- 手撕排序算法第三篇 ] 希尔排序

文章目录前言一、常见的排序算法二、希尔排序2.1 希尔排序(缩小增量排序)2.1.1 预排序阶段2.1.2 插入排序阶段2.2 单趟希尔排序2.2.1 思路分析三、希尔排序实现代码四、希尔排序的时间复杂度五、希尔排序和直接插入排序效率测试5.1 测试5.2 结论5.2.1 随机数比较5.2.2 有序数组…

【二维码识别】灰度+二值化+校正二维码生成与识别【含GUI Matlab源码 635期】

⛄一、二维码生成与识别简介 如今,移动互联网技术日新月异,随着5G时代的来临,广泛应用于数据处理过程中的二维码信息安全日益成为人们越来越关注的问题。以QR码为代表的二维码,以其在信息存储、传输和识别技术领域优异的表现,成为信息共享、移动支付等领域的宠儿。不可避免地,…

利用深度学习生成数据的时间序列预测(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 数据分析研究目前仍是行业热点,相关学者从数据分析关键技术中的异常检测、入侵检测、时间序列预测等角度展开研究。然而,现有研…

Go环境搭建与IDE开发工具配置

安装Go语言编译器 Go语言编译器》编译器将源代码编译为可执行程序》源代码程序员使用高级语言所书写的代码文件》高级语言c/c/go…》机器语言0和1构成&#xff0c;机器能直接识别》汇编语言比机器语言稍微可读一点点的指令集 编译器下载地址 根据系统下载对应的go编译器版本…

微信小程序保存相册授权全过程:第一次授权、已授权、拒绝后再授权

微信小程序部分功能需要使用授权&#xff08;也就是需要用户显式同意&#xff0c;系统会阻止开发者任何静默获取授权行为&#xff09;&#xff0c;以存储相册为例&#xff0c;用户需要获得"scope.writePhotosAlbum"权限 微信系统接口wx.getSetting可以获取已经获得的…

MySQL连接数据库

①MySQLpymysql ②django开发操作数据库&#xff0c;orm框架 安装第三方模块&#xff1a;orm pip install mysqlclient ORM Django链接数据库 在settings.py中修改 查看创建的数据库的端口号和用户名&#xff1a; Django操作表&#xff1a; 创建表 models.py from django…

[附源码]Python计算机毕业设计Django新冠疫苗接种预约系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

PDF怎么插入页?将页面添加到 PDF 文档的 3 种简单方法

得益于现代技术&#xff0c;我们现在可以轻松地合并、创建、编辑 PDF 并执行更多操作。使用专业的PDF程序在PDF文档中插入一页问题不大。这篇文章将介绍如何使用 奇客PDF编辑 和其他四个桌面和在线程序向 PDF 添加页面。 如何使用桌面程序将页面添加到 PDF 毫无疑问&#…

Simulink基础【2】- PID控制器

Simulink基础【2】- PID控制器1. Simulink作用回顾1.1 模块化1.2 常用模块1.2.1 输入信号源模块库&#xff08;Sources&#xff09;1.2.2 接收模块库&#xff08;Sinks&#xff09;1.2.3 系统模块1.2.4 数学运算模块1.3 界面布局与使用1.4 自定义模块2. PID算法仿真2.1 PID算法…

配置pytorch环境

一、安装cuda cudnn 1.下载cuda ,根据上一步安装pytorch的cuda版本对应&#xff0c;我的是cuda11.6 安装无脑下一步就可以了。 2.1下载cuDNN cuDNN 其实就是 CUDA 的一个补丁而已&#xff0c;专为深度学习运算进行优化的 2.2 配置cuDNN 解压压缩包&#xff0c;将文件夹里bin、…

Echarts中常用的参数总结以及参数自定义示例

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

Springboot之Actuator的渗透测试和漏洞修复

Actuator 的 REST 接口 Actuator监控分成两类&#xff1a;原生端点和用户自定义端点&#xff1b;自定义端点主要是指扩展性&#xff0c;用户可以根据自己的实际应用&#xff0c;定义一些比较关心的指标&#xff0c;在运行期进行监控。 原生端点是在应用程序里提供众多 Web 接口…

返回字典中的键值对dict.items()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 返回字典中的键值对 dict.items() [太阳]选择题 对下面描述错误的选项为&#xff1f; myDic {"A":1, "B":2} print("【显示】myDic",myDic) print("【显…

安全智能分析技术 模型自动化调优

安全分析模型自动化调优 MLOps&#xff08;Machine Learning Operations&#xff09;是一种人工智能 的工程实践&#xff0c;是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化&#xff0c;支持ML 模型的发布、激活、监控、性能跟踪…

【有料c++题目周刊 | 第三期】复兴时代

文章目录第一题&#xff1a;最佳圆柱体直径题目描述输入格式输出格式输入样例输出样例解题思路&C题解第二题&#xff1a;贪心国王题目描述输入格式输出格式数据范围输入样例输出样例解题思路&C题解第一题&#xff1a;最佳圆柱体直径 题目描述 在复兴时期&#xff0c;…

DevOps实战系列【第十二章】:详解Shared Libraries共享库

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 随着jenkins pipeline项目越来越多&#xff0c;冗余代码也越来越多&#xff0c;所以share library诞生。 流水线支持在外部仓库中创建【共享库】&#xff0c;然后加载到现有流水线中使用&#xf…

XXL-Job分布式任务调度框架-- 集群HA的配置3

一 xxl-job集群概述 1.1 xxl-job集群HA的作用 为了避免单点故障&#xff0c;任务调度系统通常需要通过集群实现系统高可用 由于任务调度系统的特殊性&#xff0c;“调度”和“任务”两个模块需要均支持集群部署&#xff0c;由于职责不同&#xff0c;因此各自集群侧重点也有…

AcWing第82场周赛

目录 1.第k个数 2. 多米诺骨牌 3.构造序列 1.第k个数 题目描述 给定一个长度为n的整数序列&#xff0c;a1,a2,...,an,以及一个整数k&#xff0c;请你计算该数列从大到小排序后的第k个数。 输入格式 第一行包含两个整数n&#xff0c;k 第二行n个整数 输出格式 输出一个数&…