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>
类型的实例,表示用数字作为名称,用字符串表示年龄。
泛型的主要作用
- 代码复用:一套逻辑支持多种数据类型,减少重复代码
- 类型安全:编译期进行类型检查,避免运行时类型错误
- 灵活性:提高代码的通用性和扩展性
实际应用示例
在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%')}
}