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

kotlin中expect和actual关键字修饰的函数作用

在 Kotlin 多平台编程中,expect 和 actual 关键字用于定义跨平台的抽象和具体实现。这种机制允许开发者声明一个平台无关的接口或函数签名(使用 expect),然后在每个目标平台上提供具体的实现(使用 actual)。

expect 关键字

expect 关键字用于声明一个抽象成员,它可以是类、接口、对象、函数、属性或类型别名。这些声明不包含具体的实现,而是作为跨平台代码中的占位符,表明在某个平台上将提供具体的实现。

示例:

 

kotlin复制代码

// 声明一个跨平台的期望函数
expect fun platformSpecificFunction(): String

actual 关键字

actual 关键字用于为目标平台提供 expect 声明的具体实现。每个目标平台(如 JVM、JS、Native 等)都可以有自己的 actual 实现。

示例:

 

kotlin复制代码

// 在 JVM 平台上的实际实现
actual fun platformSpecificFunction(): String {
return "This is JVM implementation"
}
// 在 JS 平台上的实际实现
// 这个文件通常位于另一个源代码集中,例如 `commonMain`, `jvmMain`, `jsMain`
actual fun platformSpecificFunction(): String {
return "This is JS implementation"
}

使用场景

  • 跨平台 API:当你需要定义一个跨平台的 API,但每个平台的具体实现不同时。
  • 条件编译:虽然不完全等同于条件编译,但 expect/actual 提供了一种在不同平台上提供不同实现的方法。
  • 共享代码:在共享代码中声明 expect 成员,然后在每个平台的特定代码集中提供 actual 实现,有助于减少重复代码。

注意事项

  • expect 声明必须在 common 源集(或任何被标记为 expect 的源集)中。
  • actual 实现必须在对应平台的源集中,例如 jvmMainjsMainnativeMain 等。
  • 一个 expect 声明可以有多个 actual 实现,每个目标平台一个。

通过 expect 和 actual,Kotlin 多平台项目能够更加灵活地处理跨平台代码和平台特定代码,从而实现真正的代码复用和平台无关性。

http://www.lryc.cn/news/535843.html

相关文章:

  • 鸿蒙音视频播放器:libwlmedia
  • 【devops】 Git仓库如何fork一个私有仓库到自己的私有仓库 | git fork 私有仓库
  • CEF132编译指南 MacOS 篇 - 构建 CEF (六)
  • mysql大数据量分页查询
  • 计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)
  • 尚硅谷爬虫note003
  • 【逆向工程】破解unity的安卓apk包
  • 稠密架构和稀疏架构
  • LeetCode --- 436周赛
  • 用easyExcel如何实现?
  • 从 X86 到 ARM :工控机迁移中的核心问题剖析
  • 大模型DeepSeek-R1学习
  • 【STM32】H743的以太网MAC控制器的一个特殊功能
  • 关于“i18n“在vue中的使用
  • 前缀树算法篇:前缀信息的巧妙获取
  • DVSI使用SenseGlove为开发虚拟现实场景技能培训
  • VSCode + Continue 实现AI编程助理
  • 【PHP的static】
  • 考研操作系统----操作系统的概念定义功能和目标(仅仅作为王道哔站课程讲义作用)
  • 从360度全景照片到高质量3D场景:介绍SC-Omnigs 3D重建系统
  • 前沿技术新趋势:值得关注的创新发展
  • 算法跟练第十一弹——二叉树
  • 机器学习(李宏毅)——BERT
  • 新数据结构(7)——Object
  • 云计算基础
  • 利用kali linux 进行自动化渗透测试
  • 【Vue中BUG解决】npm error path git
  • GPT-4o微调SFT及强化学习DPO数据集构建
  • element-plus 解决el-dialog背后的页面滚动问题,及其内容有下拉框出现错位问题
  • MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32