讨论广场 问答详情
【北向开发】【ArkTS语法求助】API10版本中,如何封装单例模式工具类?
HolyDumpling 2024-02-04 00:04:35
154 评论 分享

起因是项目中有很多地方需要使用KVStore,但是获取KVStore实例需要较为繁琐的步骤,所以想简化这个流程。

基于以上需求,我构建了一个单例工具类,在EntryAbility构造的时候,初始化工具类中的KVStore实例,然后在需要的时候获取KVStore实例,存取数据。代码如下图所示:

编译时IDE给出报错:“ Type 'undefined' is not assignable to type 'SingleKVStore'.”

如果将左侧21行代码中的" = undefined"删掉,则编译时报错如下图

// private generalStore: distributedKVStore.SingleKVStore = undefined;
 private generalStore: distributedKVStore.SingleKVStore;

请教论坛里的各位大佬,是我的语法有问题,还是我的实现思路错了?应该如何满足我的需求呢?

154 评论 分享
写回答
全部评论(5)
1 楼

语法的问题,ets要求类成员必须初始化。写成 private generalStore: distributedKVStore.SIngleKVStore | undefined = undefined 这样,并且在使用generalStore 做判断,if (this.generalStore) {} 就可以了

2024-02-04 09:38:31
2024-02-04 13:45:04
引用:“这个报错是因为你方法标明了返回kvstore,但却可以返回undefined。两种解决办法:1. 修改函数的返回值类型,2. throw new Error()”
收到,可以了,感谢解答
2024-02-04 13:45:04
2024-02-04 11:39:00
引用:“您好,按照您说的方式试了,还是无法通过编译”
这个报错是因为你方法标明了返回kvstore,但却可以返回undefined。两种解决办法:1. 修改函数的返回值类型,2. throw new Error()
2024-02-04 11:39:00
2024-02-04 10:59:14
您好,按照您说的方式试了,还是无法通过编译
6597B00A-A114-411c-A6BB-0179EF4E6B2F.png
下载
2024-02-04 10:59:14

此贴终结,感谢Hore大佬的解答。下面贴图附上两种抽离公共方法实现工具类的方式,仅供参考。如果有其他更优雅的方式,欢迎回复讨论。

方案A:通过引用公共代码块的形式实现

 方案B:通过声明单例类的形式实现(存在两个注意点,已在图中使用红字+箭头标注)

2024-02-04 14:10:29