往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)


ArkTS是否支持反射调用类的静态成员函数和实例成员函数

ArkTS可以通过动态import的方式实现反射功能,通过类名和方法名调用类中的静态成员函数和实例成员函数。示例如下,

在harlibrary中定义类和成员函数、全局函数,同时进行导出。

// harlibrary's src/main/ets/utils/Calc.ets 
export class Calc { 
  public static staticAdd(a:number, b:number):number { 
    let c = a + b; 
    console.log('DynamicImport I am 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 am harlibrary in instanceAdd, %d + %d = %d', a, b, c); 
    return c; 
  } 
} 
export function addHarlibrary(a:number, b:number):number { 
  let c = a + b; 
  console.log('DynamicImport I am harlibrary in addHarlibrary, %d + %d = %d', a, b, c); 
  return c; 
}
// harlibrary's Index.ets 
export { Calc, addHarlibrary } from './src/main/ets/utils/Calc'

在hap中对harlibrary模块添加依赖,动态import harlibrary,并调用静态成员函数staticAdd()、实例成员函数instanceAdd(),以及全局方法addHarLibrary()。

// HAP's oh-package.json5 
"dependencies": { 
  "harlibrary": "file:../harlibrary" 
}
// HAP's Index.ets 
import('harlibrary').then((ns:ESObject) => { 
  ns.Calc.staticAdd(8, 9);  // 调用静态成员函数staticAdd() 
  let calc:ESObject = new ns.Calc();  // 实例化类Calc 
  calc.instanceAdd(10, 11);  // 调用成员函数instanceAdd() 
  ns.addHarlibrary(6, 7);  // 调用全局方法addHarlibrary() 
   
  // 使用类、成员函数和方法的字符串名字进行反射调用 
  let className = 'Calc'; 
  let methodName = 'instanceAdd'; 
  let staticMethod = 'staticAdd'; 
  let functionName = 'addHarlibrary'; 
  ns[className][staticMethod](12, 13);  // 调用静态成员函数staticAdd() 
  let calc1:ESObject = new ns[className]();  // 实例化类Calc 
  calc1[methodName](14, 15);  // 调用成员函数instanceAdd() 
  ns[functionName](16, 17);  // 调用全局方法addHarlibrary() 
});


Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐