HarmonyOS鸿蒙Next中如何动态获取类的属性

HarmonyOS鸿蒙Next中如何动态获取类的属性

如何通过动态的根据字段名获取对象对应的值呢

export class UserBean {
  openId: string | null = null
  uid: string | null = null
  token: string | null = null
  accessToken: string | null = null
  refreshToken: string | null = null

}

addUser(userBean: UserBean) {
  let valueBucket: ValuesBucket = {};
  let columns: string[] = Object.keys(userBean) as Array<keyof UserBean>
  columns.forEach((name, index) => {
    valueBucket[name] = userBean[name]
  })
  this.rdbStore?.insert(USER_TABLE_NAME, valueBucket)
}

userBean[name]代码飘红,提示Indexed access is not supported for fields (arkts-no-props-by-index) <ArkTSCheck>


更多关于HarmonyOS鸿蒙Next中如何动态获取类的属性的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

如何通过动态的根据字段名获取对象对应的值 需要注意一点 :

ArkTS 编译器不支持使用索引访问对象属性 即 :不允许使用类似 obj[‘prop’] 或 obj[propName] 的方式来访问对象属性

解决方法:要解决这个问题,你应该使用点符号(.)来访问对象的属性,例如 obj.prop

动态传入 propName 来获取值 可以使用反射方法

请参考:valueBucket[name] = Reflect.get(userBean,name)

更多关于HarmonyOS鸿蒙Next中如何动态获取类的属性的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,动态获取类的属性可以通过使用Reflect API实现。Reflect API提供了一系列方法用于动态操作对象属性和方法。具体步骤如下:

  1. 获取类对象:首先需要获取目标类的类对象。可以通过Class.forName()方法根据类名获取类对象。

  2. 获取属性对象:通过类对象的getDeclaredField()方法获取指定属性的Field对象。getDeclaredField()方法可以获取类中声明的所有属性,包括私有属性。

  3. 设置属性可访问:如果属性是私有的,需要通过Field对象的setAccessible(true)方法设置属性为可访问。

  4. 获取属性值:通过Field对象的get()方法获取属性的值。get()方法需要传入目标对象实例,如果属性是静态的,可以传入null

示例代码如下:

import { Reflect } from '@ohos.reflect';

class Example {
    private name: string = "HarmonyOS";
}

let example = new Example();
let cls = Reflect.getClass(example);
let field = cls.getDeclaredField("name");
field.setAccessible(true);
let value = field.get(example);
console.log(value); // 输出: HarmonyOS

通过以上步骤,可以在HarmonyOS鸿蒙Next中动态获取类的属性。

在HarmonyOS鸿蒙Next中,可以通过反射机制动态获取类的属性。使用Class对象的getFieldgetDeclaredField方法获取特定字段,getFieldsgetDeclaredFields方法获取所有字段。获取字段后,使用Field对象的get方法获取属性值。注意,访问私有字段时需先调用setAccessible(true)

示例代码:

Class<?> clazz = MyClass.class;
Field field = clazz.getDeclaredField("fieldName");
field.setAccessible(true);
Object value = field.get(instance);

此方法适用于需要动态获取和操作类属性的场景。

回到顶部