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

跟我一起学“仓颉”编程语言-泛型类型

一、泛型

泛型指的是参数化类型,就是一个定义时未知,但需要在使用时指定的类型,在仓颉中,泛型可以分为泛型函数和泛型类型。

注意:在定义泛型函数或泛型类型时,使用类型标识符来表示未知的类型,在使用泛型函数或泛型类型时,为类型标识符传递具体的类型。

二、泛型类型

泛型函数:定义了一个或多个类型形参的函数。

package Study func getLastValue<T> (values: Array<T>) { return values[values.size - 1] } main() { println(getLastValue([1, 2, 3, 4, 5, 6])) }

泛型类

package Study class AreaCode<K, V> { var area: K var code: V init(area: K, code: V) { this.area = area this.code = code } } main() { let cn = AreaCode<String, Int64>("中国", 86) println("地区: ${cn.area}, 区号: ${cn.code}") let els = AreaCode<String, Int64>("俄罗斯", 7) println("地区: ${els.area}, 区号: ${els.code}") }

注意:如果父类是泛型类,子类是非泛型类,在定义子类的时候,必须把父类的每一个泛型变成具体类型。

package Study open class AreaCode<K, V> { var area: K var code: V init(area: K, code: V) { this.area = area this.code = code } } class InternalAreaCode <: AreaCode<String, String> { init(area: String, code: String) { super(area, code) } } main() { let hk = InternalAreaCode("香港", "00852") println("城市: ${hk.area}, 区号: ${hk.code}") let shanghai = InternalAreaCode("上海", "021") println("城市: ${shanghai.area}, 区号: ${shanghai.code}") }

泛型结构体

package Study struct AreaCode<K, V> { var area: K var code: V init(area: K, code: V) { this.area = area this.code = code } } main() { let hk = AreaCode<String, String>("香港", "00852") println("城市: ${hk.area}, 区号: ${hk.code}") let shanghai = AreaCode<String, String>("上海", "021") println("城市: ${shanghai.area}, 区号: ${shanghai.code}") }

泛型接口

package Study interface USB<T> { func use(value: T): Unit } class Machine <: USB<String> { public override func use(value: String) { println("${value}使用中") } } main() { Machine().use("打印机") }

泛型枚举

package Study enum MyOption<T> { Yes(T) | No public func getOrThrow(): T { match (this) { case Yes(value) => value case No => throw NoneValueException("取值失败") // 抛出异常 } } } main() { let num = MyOption<Int64>.Yes(114514) println(num.getOrThrow()) let none = MyOption<Int64>.No println(none.getOrThrow()) }

三、小结

本章为大家详细的介绍了仓颉编程语言中泛型类型的内容,下一章,为大家带来泛型约束的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉服务端开发有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

http://www.rkmt.cn/news/1488156.html

相关文章:

  • 从MC68HC708MP16到MC68HC908MR24的嵌入式电机控制芯片迁移实战指南
  • 素数的学习
  • 如何使用PHAR Utils快速创建可重现的PHAR包:Timestamps类完整指南
  • 别再手动改销售单了!SAP SD客户物料主数据VD51配置详解(附销售订单自动带出技巧)
  • 如何让经典IPX游戏在现代Windows系统重生:IPXWrapper完整指南
  • 手把手教你用draw.io(diagrams.net)画高颜值技术配图,提升文章和文档逼格
  • Node-Influx 在企业级应用中的应用:监控、日志分析和物联网数据处理
  • EMO-Ai-7b-Q8_0-GGUF部署实战:从Docker到云服务的全面指南
  • Czkawka完整指南:如何快速清理电脑垃圾文件释放存储空间
  • LDA与PCA选择指南:从任务目标到数据特性的实战决策树
  • 网络安全岗位解析5:安全运维岗位,从零基础入门到精通,收藏这一篇就够了!
  • 深入解析HI08主机端口:嵌入式系统高速并行通信与DSP数据交换
  • 如何在macOS上运行Windows应用:Whisky跨平台兼容性终极指南
  • 3步解锁VR视频:无需头盔的终极2D播放方案
  • 微信聊天记录完整备份终极指南:3步实现数据永久保存
  • 完整教程:go2rtc视频流转发工具从入门到精通
  • 【湘潭黄金回收】足金999回收实测三家正规门店排名 - 润富黄金回收
  • 如何在JavaScript应用中高效计算太阳和月亮位置?SunCalc完整指南
  • 智能语音音乐管家:XiaoMusic如何让小爱音箱变身专业级音乐服务器
  • 主治医师备考课程怎么选?阿虎医考四阶段课程体系全解读 - 医考机构品牌测评专家
  • 3个技巧让中文文献管理效率翻倍:Jasminum插件深度指南
  • 终极歌词批量提取方案:一键同步网易云QQ音乐LRC文件
  • 2026 年狗狗驱虫药排行榜:TOP5 排名独家揭秘 - 思溯深度专栏
  • Czkawka终极指南:三步快速清理重复文件释放存储空间
  • 国内商用UV平板打印机品牌排行 - 奔跑123
  • 3个颠覆性创新:Kronos如何用AI语言模型重塑量化交易范式
  • 2026苏州风口风阀厂家推荐及行业应用解析 - 品牌排行榜
  • Boss Show Time:3步掌握招聘时间可视化,告别无效投递的求职指南
  • 2026 杭州萧山区梵克雅宝卡地亚回收指南,认准中检资质不踩隐形扣费坑 - 奢侈品回收评测
  • 终极macOS鼠标光标个性化指南:Mousecape让你的桌面焕然一新