使用ArkTSUtils.ASON.parse生成的Sendable对象,和通过类(@Sendable装饰器)构造函数实例化出来的对象,有什么区别?
ASON解析与生成:ASON工具提供了Sendable对象的序列化、反序列化能力。使用ASON.stringify方法可将对象转换为字符串,使用ASON.parse方法可将字符串转换为Sendable对象,从而实现对象在并发任务间的高性能引用传递。
相同点:
不同点:ASON.parse生成的Sendable对象无法调用类成员方法。原因是使用ArkTSUtils.ASON.parse()解析JSON生成Sendable对象时,生成的仅是数据结构的副本,不会保留原始类的原型链和方法,所以无法调用方法。
- import { ArkTSUtils, lang, taskpool } from '@kit.ArkTS';
- import { BusinessError } from '@kit.BasicServicesKit';
-
- @Sendable
- class TestClass {
- name: string = 'Bob';
- age: number = 18;
- city: string = 'ct';
-
- info() {
- this.age += 1;
- console.info(`name: ${this.name} age: ${this.age} city: ${this.city}`);
- }
- }
-
- @Concurrent
- function method(testClass: TestClass) {
- testClass.name = 'Cici';
- console.info('modify name to Cici');
- }
-
- @Entry
- @Component
- struct Index {
- build() {
- Column() {
- Button('ASON')
- .onClick(async () => {
- type ISendable = lang.ISendable;
- let jsonText = '{"name": "John", "age": 30, "city": "ct"}';
- let obj = ArkTSUtils.ASON.parse(jsonText) as ISendable;
-
- // 在线程中传递
- try {
- let task = new taskpool.Task(method, (obj as TestClass));
- await taskpool.execute(task);
- console.info((obj as TestClass).name); // 打印Cici
- } catch (e) {
- let err: BusinessError = e as BusinessError;
- console.error(`执行失败,${err.code}, ${err.message}`);
- }
-
- // 获取和修改属性值
- try {
- (obj as TestClass).name = 'Alice';
- console.info((obj as TestClass).name); // 打印Alice
- jsonText = ArkTSUtils.ASON.stringify(obj);
- console.info(`${jsonText}`); // 打印{"name":"Alice","age":30,"city":"ct"}
- } catch (e) {
- let err: BusinessError = e as BusinessError;
- console.error(`修改失败,${err.code}, ${err.message}`);
- }
-
- // 无法调用类成员方法
- try {
- (obj as TestClass).info();
- console.info('调用成功');
- } catch (e) {
- let err: BusinessError = e as BusinessError;
- console.error(`调用失败,${err.code}, ${err.message}`); // 无法调用,打印:调用失败,undefined, undefined is not callable
- }
- });
- }
- .height('100%')
- .width('100%')
- .justifyContent(FlexAlign.Center);
- }
- }
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功