HarmonyOS鸿蒙Next中关于成员变量初始化逻辑的疑问

HarmonyOS鸿蒙Next中关于成员变量初始化逻辑的疑问

咨询描述:
官方文档有些demo代码里,将成员变量进行了new初始化,但是随后会立刻给它赋上其他的值,真正用的时候是使用新赋的值,那么最开始new的值不就完全没有意义了吗?并且会对理解代码有阻碍,为什么要new,就算调用的时候使用的是new出来的值,在业务上也是错误的,本来就不该new出来,为什么不能直接定义为可空或者undefined呢?

比如这个文档里[a href=“https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-router-to-navigation-V5”]https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-router-to-navigation-V5[/a],demo代码请看截图。


更多关于HarmonyOS鸿蒙Next中关于成员变量初始化逻辑的疑问的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

pathStack的类型是NavPathStack,因此通过new NavPathStack()来给一个初始值,是对应NavPathStack这个类型的,从文档的角度来说,使用pathStack: NavPathStack = new NavPathStack(),是可以降低开发者的理解门槛的,并且ArkTS是一种静态类型语言,所有数据的类型都必须在编译时确定。所以文档上使用的是这种写法

您这边是从业务角度考虑,使用undefined或null进行占位也是可以的,两边考虑的角度不一样,出现分歧是很正常的,希望您可以理解

更多关于HarmonyOS鸿蒙Next中关于成员变量初始化逻辑的疑问的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,成员变量的初始化逻辑遵循特定的顺序。首先,静态成员变量在类加载时初始化,且只初始化一次。其次,实例成员变量在对象创建时初始化,按照它们在类中声明的顺序进行。如果成员变量在声明时未赋值,系统会赋予默认值,如数值类型为0,布尔类型为false,引用类型为null。构造函数中的初始化代码会在成员变量默认初始化之后执行。

在HarmonyOS Next开发中,这种成员变量初始化方式主要是为了遵循TypeScript/ArkTS的类型安全原则。虽然看起来初始化的值会被立即覆盖,但这种做法有几个实际考虑:

  1. 类型安全:显式初始化可以避免编译时"可能未初始化"的警告,确保变量始终有有效值

  2. 代码可读性:明确展示了变量的预期类型,便于其他开发者理解

  3. 框架要求:某些HarmonyOS API要求组件属性必须初始化,即使后续会被覆盖

  4. 防错机制:防止在构造函数或初始化逻辑意外跳过赋值时出现运行时错误

对于可空类型(undefined),虽然技术上可行,但在HarmonyOS应用开发中不推荐过度使用,因为这会导致需要大量空值检查。官方示例采用这种模式是为了展示更健壮的代码实践。

实际项目中,如果确定变量会在创建后立即初始化,可以考虑使用lateinit修饰符(在ArkTS中)或明确的undefined类型,但要注意添加适当的空值检查。

回到顶部