HarmonyOS 中的 泛型类和泛型接口

发布于:2025-08-20 ⋅ 阅读:(19) ⋅ 点赞:(0)

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

泛型接口(Generic Interface)

// 定义泛型接口,T是类型变量
interface IPerson<T> {
  a: T;                // 属性a的类型为T
  b: 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;  // 名称属性类型为T
  age: K;   // 年龄属性类型为K

  constructor(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: T
  b: T[]
  c: (aa: T) => T
}

const obj: IPerson<string> = {
  a: "xxx",
  b: ["xx", "xx"],
  c(aa: string) {
    return aa
  }
}

class Person<T, K> {
  name: T
  age: K

  constructor(name: T, age: K) {
    this.name = name
    this.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%')
  }
}

网站公告

今日签到

点亮在社区的每一天
去签到