HarmonyOS 如何通过反射创建某个类

在主模块中有个类A,如何在har包中通过反射,获取到这个类A的实例?类似java的Class.forName()方法。

HarmonyOS
2024-12-27 15:01:15
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

想在HAR包中通过反射获取主模块中类A的实例可以按照以下步骤进行:

1.确保HAR包中可以访问主模块:确保HAR包中包含对主模块的依赖声明,可以通过module.json文件中的dependencies字段进行配置。确保主模块中的类A在HAR包中可以被访问,通常通过oh-package.json5文件中的dependencies进行配置。

2.使用反射获取类A的实例:通过类名获取类实例的反射方法。

如下:

module.ets

export class DataTable {
  constructor() {
  }
  static tagName() {
    return 'data-table'
  }
} 

Index.ets

import('./module').then(module => {
  const t = module.DataTable.tagName();
});

该方法与java中的Class.forName()方法类似,可以看以下示例代码:harlibrary的src/main/ets/utils/Calc.ets

export class Calc {
  public constructor() {}
  public static staticAdd(a:number, b:number):number {
    let c = a + b;
    console.log("DynamicImport I'm harLibrary in staticAdd, %d + %d = %d", a, b, c);
    return c;
  }
  public instanceAdd(a:number, b:number):number {
    let c = a + b;
    console.log("DynamicImport I'm harLibrary in instanseAdd, %d + %d = %d", a, b, c);
    return c;
  }
}
export function addHarLibrary(a:number, b:number): number {
  let c = a + b;
  console.log("DynamicImport I'm harLibrary in addHarLibrary, %d + %d = %d", a, b, c);
  return c;
}

harlibrary的index.ets

export { Calc, addHarLibrary } from './src/main/ets/utils/Calc'

hap的index.ets

let harLibrary = 'harlibrary';
import(harLibrary).then((ns: ESObject) => {  // 动态import变量是0118Beta版本新增特性,入参换成字符串'harlibrary'是现有特性。
  ns.Calc.staticAdd(7, 8);  // 反射调用静态成员函数staticAdd()
  let calc: ESObject = new ns.Calc();  // 实例化类Calc
  calc.instanceAdd(8, 9);  // 调用实例成员函数instanceAdd()
  ns.addHarLibrary(6, 7);  // 调用全局方法addHarLibrary()
});
分享
微博
QQ
微信
回复
2024-12-27 17:05:20
相关问题
HarmonyOS ArkTS如何实现反射
247浏览 • 1回复 待解决
ArkTS支持反射,有人知道反射用法吗?
2877浏览 • 1回复 待解决
HarmonyOS ArkTS反射
265浏览 • 1回复 待解决
ArkUI如何通过代码动态创建组件
2898浏览 • 1回复 待解决
ArkTS中如何实现反射
1063浏览 • 1回复 待解决
HarmonyOS 环境如何反射执行
607浏览 • 1回复 待解决
HarmonyOS反射该怎么写
167浏览 • 1回复 待解决
字符串反射
315浏览 • 1回复 待解决
HarmonyOS ts是否支持反射
540浏览 • 1回复 待解决
HarmonyOS是否支持通过代码创建工程
748浏览 • 1回复 待解决