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

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.dtcms.com/a/340078.html

相关文章:

  • 51单片机拼接板(开发板积木)
  • 爬小红书搜索详情软件:根据关键词采集笔记详情,包含正文内容、发布时间、转评赞藏等
  • C++开发基础之:队列用法与生产者消费者模型实战和可直接复用的线程安全的队列
  • 疏老师-python训练营-Day50预训练模型+CBAM注意力
  • 会话技术之<Cookie>和<Session>的区别联系
  • “数据权限”的道和术
  • 从 SGD 到梯度累积:Epoch、Batch、Step 的关系全解析
  • 使用redis读写锁实现抢券功能
  • Hive 存储管理测试用例设计指南
  • 力扣(最小栈)
  • Android逆向工程:Smali语法解析完整指南
  • [ Maven 开发工具 ] 环境搭建及配置
  • DRM驱动架构浅析-上(DRM基础概要与U-Boot阶段驱动解析)
  • 基于 OpenMV 的矩形识别与 STM32 串口通信(电子设计大赛实用教程)
  • k8s运维实践:高可用Redis Cluster(三主三从)与Proxy部署方案
  • 使用 Docker 安装长安链管理平台 + 部署区块链与示例合约
  • daily notes[3]
  • Eigen中Dense 模块简要介绍和实战应用示例(最小二乘拟合直线、协方差矩阵计算和稀疏求解等)
  • 三极管驱动led灯搭配的电阻选取方法
  • 跟随广州AI导游深度探寻广州历史底蕴​
  • 如何做一次AIMD
  • 农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
  • [OWASP]智能体应用安全保障指南
  • 英伟达显卡驱动怎么更新 详细步骤教程
  • MySQL练习题50题(附带详细教程)
  • Day13_【DataFrame数据组合concat连接】【案例】
  • C5.5:VDB及后面的电路讨论
  • 决策树(2)
  • Yum使用时报错
  • Spring Boot 全局异常处理