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 回复
在HarmonyOS鸿蒙Next中,动态获取类的属性可以通过使用Reflect API实现。Reflect API提供了一系列方法用于动态操作对象属性和方法。具体步骤如下:
-
获取类对象:首先需要获取目标类的类对象。可以通过
Class.forName()方法根据类名获取类对象。 -
获取属性对象:通过类对象的
getDeclaredField()方法获取指定属性的Field对象。getDeclaredField()方法可以获取类中声明的所有属性,包括私有属性。 -
设置属性可访问:如果属性是私有的,需要通过
Field对象的setAccessible(true)方法设置属性为可访问。 -
获取属性值:通过
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中动态获取类的属性。


