鸿蒙ArkTS中Object类型与类型断言的理解

ArkTS中的基本数据类型包括number、string等简单类型,它们可以准确地表示单一的数据类型。

object类型则用于表示除基本类型外的类型。

而Object类型是所有引用类型的基类型。任何值,包括基本类型的值(它们会被自动装箱),都可以直接被赋给Object类型的变量。

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/introduction-to-arkts-V5

那么,为什么会创造出Object这样一个类型,换言之该类型可以带来哪些好处呢?如果想深刻的理解Object的好处,那就不得不将Object与ArkTS中的另一个技术"类型断言",一起分析。

下面用一个例子来说明以上问题,该例子是一个简易音乐播放器,如下图所示:

1.播放器包含2个页面,一个是歌曲列表页,一个是主播放器页面。

2.歌曲列表页有多首歌曲,通过点击歌曲列表的不同列表项,APP可以跳转到主播放器页面。

3.主播放器页面显示歌曲的信息,即点击不同列表项,播放器页面显示的歌曲信息不同。

Object类型

在上面的例子中,只设计了2个pages。虽然不同歌曲对应的播放页面不一样,但显然不可以为不同歌曲设计对应的page,因为真实场景下,歌曲列表是用户自定义的,可变的,歌曲也是不断更新的,不可能提前设计那么多页面。那么,一种合理的思路是**在点击列表项跳转到播放器页面时,把该列表项的信息传递到目标页面。实际上,**路由跳转的函数是可以传参的,如下图,在路由跳转函数pushUrl里,是可以通过参数params,传递参数item的。

那么,此处就会出现一个最关键的问题,那就是**路由跳转函数pushUrl在定义时,参数params该定义成什么类型呢?因为无法预知开发者会在此处传递什么类型的参数。**上面的例子里,传递的是自定义的SongBean类型的数据。

实际上,此处利用了任何值****都可以直接被赋给Object类型的变量的特点**。**

打开的路由跳转函数pushUrl 的定义,如下图可知,参数类型是RouterOptions,其定义中可以看到params的类型是Object。

因此,可知,无论传递的是什么类型,在把参数赋给params,通过路由传递的时候,数据已经变为Object类型了。举个例子,就好比无论你寄的什么东西,书或者电子产品,当打包好的那一刻,都叫做快递包裹(Object)。

类型断言

**数据经过路由传递后,类型变为Object,那么在传递到目标页面后,如果想使用该数据,必须要把它变为原本的类型。**举个例子,你的快递(一本书)寄到了,你不可能打开快递的第100页,你只可以打开书的第100页,所以要恢复该数据的身份。这里就要用到类型断言,即你知道这个数据应该是什么类型,但因为某些原因,它变成了一个更笼统的类型,开发者可以根据开发逻辑声明该类型为原本的类型。

如下图所示,通过 router.getParams() 可以得到传递来的参数,然而该参数类型是Object。

因此,我们在后面加上as SongBean,即是类型断言,简单说就是开发者自己给类型模糊的数据一个确定的类型,自己承担后果,如下所示。那么,接下来得到的数据就是和从歌曲列表页面拿到的数据一样的了,可以直接使用。

基于以上分析,有助于理解Object的用法、类型断言的使用场景与意义。

如有问题请指正,转载请说明出处!

相关推荐
Flutter_OH13 小时前
Flutter OHOS 三方库与插件适配相关问题
harmonyos
Flutter_OH13 小时前
Flutter OHOS ohos应用编译相关问题
harmonyos
雨雨雨雨雨别下啦15 小时前
【OpenHarmony北向开发】ArkTS基础教学
typescript·arkts·openharmonys
马剑威(威哥爱编程)17 小时前
【共创稿事节】HarmonyOS 7 Agent 开发实战 01:云端大模型 API 接入底座
华为·harmonyos
万物智能信息科技18 小时前
人体感应芯片PIR模块驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·嵌入式硬件·华为·开源·harmonyos
m0_7381858218 小时前
Flutter 鸿蒙化实战:sqflite 适配 OpenHarmony,本地 SQLite 数据库
flutter·华为·harmonyos·鸿蒙
马剑威(威哥爱编程)20 小时前
【共创稿事节】HarmonyOS 7 Agent 开发实战 02:Agent 工程脚手架与对话 UI 骨架
华为·harmonyos
打工仔折腾 AI21 小时前
鸿蒙平板远控电脑实测:ToDesk蓝牙键鼠、双模式鼠标与跨端剪贴板落地记录
人工智能·后端·python·性能优化·计算机外设·电脑·harmonyos
打工仔折腾 AI21 小时前
鸿蒙端ToDesk远控电脑实测:蓝牙键鼠、双模式鼠标与跨端剪贴板实践
后端·python·性能优化·计算机外设·电脑·harmonyos·ai agent 实战
OH_TPC21 小时前
【鸿蒙优选三方库】@ohos/axios:前端转鸿蒙,网络层几乎不用改
前端·华为·harmonyos·鸿蒙