ArkTS通过反射调用函数实际应用

zhouchy
发布于 2025-3-8 21:59
浏览
0收藏


文章目录

概要

使用ArkTS定义接口类,在编写接口实现类时,是无法声明默认实现的,这样无论接口类中的函数是否需要用到,都需要在实现类中进行实现,造成大量的冗余代码,降低代码的可读性。下面我将讲述一下我对此问题的解决思路。

技术细节

1、为了解决上述问题,我想到了将接口类中的函数声明为可空类型,如下所示

export interface LoadCallback {

  onHeightChanged?: (height: number) => void

  closeWindow?: () => void
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

2、定义接口实现类,在这里我只实现了closeWindow函数,因为onHeightChanged函数没有用到,所以此处没有实现

private loadCallback?: LoadCallback = {
  closeWindow: (() => {
    router.back();
  }).bind(this)
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

3、通过上面的方式,我们解决了接口实现类冗余代码的问题,下面我们通过this.loadCallback?.closeWindow()的方式进行调用,会发现如下报错“Cannot invoke an object which is possibly 'undefined'. <ArkTSCheck>”。

4、通过直接调用函数的方式行不通,那么就换个思路,通过反射的方式进行调用,反射类的方法如下

export function callMethod(claz: object|undefined, method: string, args?: object|number|string|boolean) {
  if (!claz || !claz[method]) return
  if (args) {
    Reflect.get(claz, method)(args)
  } else {
    Reflect.get(claz, method)()
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

5、使用反射来进行调用

callMethod(this.loadCallback, 'closeWindow')

callMethod(this.loadCallback, 'onHeightChanged', 100)
  • 1.
  • 2.
  • 3.

小结

这样我们就实现了ArkTS通过反射调用函数的实际应用。


转载自​​写文章-CSDN创作中心​

收藏
回复
举报


回复
    相关推荐