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

HarmonyOS 中的 泛型类和泛型接口

在HarmonyOS的ArkTS中,泛型类和泛型接口是实现代码复用和类型安全的重要机制,它们允许组件在定义时不指定具体类型,而是在使用时动态指定。你提供的代码很好地展示了它们的基本用法,下面我来详细解释:

泛型接口(Generic Interface)

// 定义泛型接口,T是类型变量
interface IPerson<T> {a: T;                // 属性a的类型为Tb: T[];              // 属性b是T类型的数组c: (aa: T) => T;     // 方法c接收T类型参数并返回T类型
}// 使用时指定具体类型为string
const obj: IPerson<string> = {a: "xxx",b: ["xx", "xx"],c(aa: string) {return aa;}
};

泛型接口的优势是可以为同一接口结构支持多种数据类型,而无需重复定义多个接口。例如,你可以同样创建IPerson<number>类型的对象。

泛型类(Generic Class)

// 定义泛型类,T和K是类型变量
class Person<T, K> {name: T;  // 名称属性类型为Tage: K;   // 年龄属性类型为Kconstructor(name: T, age: K) {this.name = name;this.age = age;}
}// 使用时指定具体类型:T为string,K为number
const p1 = new Person<string, number>("小明", 100);

泛型类支持多个类型变量,使类的属性和方法可以灵活适配不同数据类型。例如,你也可以创建Person<number, string>类型的实例,表示用数字作为名称,用字符串表示年龄。

泛型的主要作用

  1. 代码复用:一套逻辑支持多种数据类型,减少重复代码
  2. 类型安全:编译期进行类型检查,避免运行时类型错误
  3. 灵活性:提高代码的通用性和扩展性

实际应用示例

在HarmonyOS开发中,泛型常用于集合类、网络请求封装、状态管理等场景:

// 泛型工具类示例
class DataStore<T> {private data: T[] = [];addItem(item: T): void {this.data.push(item);}getItem(index: number): T {return this.data[index];}
}// 使用时指定类型
const userStore = new DataStore<User>();
const postStore = new DataStore<Post>();

通过泛型,你可以构建更加灵活、通用且类型安全的HarmonyOS应用代码。

在这里插入图片描述

// 泛型接口
interface IPerson<T> {a: Tb: T[]c: (aa: T) => T
}const obj: IPerson<string> = {a: "xxx",b: ["xx", "xx"],c(aa: string) {return aa}
}class Person<T, K> {name: Tage: Kconstructor(name: T, age: K) {this.name = namethis.age = age}
}
const p1 = new Person<string,number>("小明",100)@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize($r('app.float.page_text_font_size')).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(() => {this.message = 'Welcome';})}.height('100%').width('100%')}
}
http://www.xdnf.cn/news/18137.html

相关文章:

  • PHP如何使用JpGraph生成折线图?
  • 摄像头模块在运动相机中的应用
  • Java代码审计-SE-4
  • 微服务集训整理
  • Java开发面试实战:Spring Boot微服务与数据库优化案例分析
  • Shopee本土店账号安全运营:规避封禁风险的多维策略
  • C/C++ 常见笔试题与陷阱详解
  • 深入理解Prompt构建与工程技巧:API高效实践指南
  • 网络编程day2
  • Windows 8.1 补丁 KB2919355 安装方法 详细步骤
  • 管理本地用户和组:红帽企业 Linux 系统安全的基础
  • Python数据容器(列表,元组,字典) 从入门到精通
  • ​Kali Linux 环境中的系统配置文件与用户配置文件大全
  • 无人机基础知识
  • 力扣70:爬楼梯
  • Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
  • 功能测试相关问题
  • CNN-BiLSTM-Attention、CNN-BiLSTM、BiLSTM三模型多变量时序光伏功率预测
  • Maven 生命周期和插件
  • shell脚本第一阶段
  • 自学中医笔记(二)
  • Mysql——分库分表后id冲突解决方案(即分布式ID的生成方案)
  • 【tips】unsafe-eval线上页面突然空白
  • python实现pdfs合并
  • Ansible 部署LNMP
  • Read View 在 MVCC 里如何工作的?
  • 下载大模型经常遇到的报错Still waiting to acquire lock on Wan2.1-VACE-14B/.cache与解决办法
  • Linux系统WireShark抓取本地网卡报文
  • 发布npmjs组件库
  • 套接字超时控制与服务器调度策略