harmony 鸿蒙\@Type装饰器:标记类属性的类型

  • 2025-06-16
  • 浏览 (8)

\@Type装饰器:标记类属性的类型

为了实现序列化类时不丢失属性的复杂类型,开发者可以使用\@Type装饰器装饰类属性。

\@Type的目的是标记类属性,配合PersistenceV2使用,防止序列化时类丢失。在阅读本文档前,建议提前阅读:PersistenceV2

说明:

\@Type从API version 12开始支持。

概述

\@Type标记类属性,使得类属性序列化时不丢失类型信息,便于类的反序列化。

装饰器说明

\@Type装饰器 说明
装饰器参数 type:类型。
可装饰的类型 Object class以及Array、Date、Map、Set等内嵌类型。

使用限制

  1. 只能用在\@ObservedV2装饰的类中,不能用在自定义组件中。

    class Sample {
      data: number = 0;
    }
    @ObservedV2
    class Info {
      @Type(Sample)
      @Trace sample: Sample = new Sample(); // 正确用法
    }
    @Observed
    class Info2 {
      @Type(Sample)
      sample: Sample = new Sample(); // 错误用法,不能用在@Observed装饰的类中,编译时报错
    }
    @ComponentV2
    struct Index {
      @Type(Sample)
      sample: Sample = new Sample(); // 错误用法,不能用在自定义组件中
      build() {
      }
    }
    
  2. 不支持collections.Set、collections.Map等类型。

  3. 不支持非buildin类型。如PixelMap、NativePointer、ArrayList等Native类型。

  4. 不支持简单类型。如string、number、boolean等。

  5. 不支持构造函数含参的类。

使用场景

持久化数据

数据页面

import { Type } from '@kit.ArkUI';

// 数据中心
@ObservedV2
class SampleChild {
  @Trace p1: number = 0;
  p2: number = 10;
}

@ObservedV2
export class Sample {
  // 对于复杂对象需要@Type修饰,确保序列化成功
  @Type(SampleChild)
  @Trace f: SampleChild = new SampleChild();
}

页面

import { PersistenceV2 } from '@kit.ArkUI';
import { Sample } from '../Sample';

@Entry
@ComponentV2
struct Page {
  prop: Sample = PersistenceV2.connect(Sample, () => new Sample())!;

  build() {
    Column() {
      Text(`Page1 add 1 to prop.p1: ${this.prop.f.p1}`)
        .fontSize(30)
        .onClick(() => {
          this.prop.f.p1++;
        })
    }
  }
}

你可能感兴趣的鸿蒙文章

harmony 鸿蒙\@AnimatableExtend装饰器:定义可动画属性

harmony 鸿蒙管理应用拥有的状态概述

harmony 鸿蒙AppStorage:应用全局的UI状态存储

harmony 鸿蒙基本语法概述

harmony 鸿蒙\@Builder装饰器:自定义构建函数

harmony 鸿蒙\@BuilderParam装饰器:引用\@Builder函数

harmony 鸿蒙创建自定义组件

harmony 鸿蒙自定义组件混用场景指导

harmony 鸿蒙自定义组件成员属性访问限定符使用限制

harmony 鸿蒙自定义组件冻结功能

0  赞