HarmonyOS 專案中泛型的使用

西北野狼發表於2024-04-25

泛型(Generics)概述

泛型是一種程式語言特性,它支援型別引數化,使得定義的類、介面和方法可以適用於多種型別,而不僅僅是固定的一種型別。

理解泛型

泛型允許在定義介面時,讓引數的型別更加靈活,從而使得功能更加強大。簡而言之,泛型提供了一種方式,讓程式碼能夠適應不同的資料型別,而不需要為每種資料型別編寫重複的程式碼。

專案中使用泛型的例子

在專案中,泛型被用於實現資料來源介面 IDataSource,以支援不同型別的資料實體物件陣列。這裡有一個通用的資料來源類 CommonDataSource,它實現了 IDataSource 介面,並使用泛型 T 來表示可以是任何型別的資料實體。

export class CommonDataSource<T> implements IDataSource {
  private dataArray: T[] = [];
  private listeners: DataChangeListener[] = [];

  constructor(element: T[]) {
    this.dataArray = element;
  }

  public getData(index: number): T {
    return this.dataArray[index];
  }

  public totalCount(): number {
    return this.dataArray.length;
  }

  public addData(index: number, data: T[]): void {
    this.dataArray = this.dataArray.concat(data);
    this.notifyDataAdd(index);
  }

  public pushData(data: T): void {
    this.dataArray.push(data);
    this.notifyDataAdd(this.dataArray.length - 1);
  }

  // 其他方法...
}

使用場景

  1. 頁面1

    LazyForEach(new CommonDataSource<ProductDataModel>(productData), (item: ProductDataModel) => {
      ListItem() {
        // ...
      }
    });
    
  2. 頁面2

    LazyForEach(new CommonDataSource<Commodity>(this.commodityList), (item: Commodity) => {
      ListItem() {
        // ...
      }
    });
    

網路請求中的泛型應用

網路請求的入參和返回值的型別判斷也會用到泛型,以確保型別安全和提高程式碼的可讀性。
使用示例見:HarmonyOS 簡易封裝網路請求框架

泛型在現代程式語言中得到了廣泛的支援和應用,它們為開發者提供了一種強大的工具,以建立更加靈活和可重用的程式碼。

相關文章