HarmonyOS 鸿蒙Next ArkTs支持类似java的匿名内部类实现接口

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ArkTs支持类似java的匿名内部类实现接口

比如声明一个接口:

export interface QDDownAndUploadHttpCallBack(){
progress(model: progressModel): void
} 

在其他地方,可以不需要创建一个自定义类实现:QDDownAndUploadHttpCallBack,而是类似java的:

new QDDownAndUploadHttpCallBack(){
progress(model: progressModel): void {
xxxxx
}
} 

8 回复

ArkTS不支持匿名类,建议使用嵌套类实现。因为使用匿名类创建的对象类型未知,这与ArkTS不支持structural typing和对象字面量的类型冲突。

// 原先 
class A { 
  foo() { 
    let a = new class { 
      v: number = 123 
    }(); 
  } 
} 

// 现在 class A { foo() { class B { v: number = 123 } let b = new B(); } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

或者换成下面这种写法:

onSucces:(t: T)=> void
onFailed:(code: string, reason: string)=>void
}

let obj: IVoiceRecordListener<string> = { onSucces:()=>{}, onFailed:()=>{} }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

楼主你好,第一种写法岂不每次都是新的B对象

还有一个问题,这样写的内部类有和意义,还是无法通过A访问

cke_673.png

第二种写法Api11中不能用啊

嵌套类写法在[@Component](/user/Component)页面中也不好用

你好,解决了吗?

我使用1、3适配,能能够正常运行
————————————————————————————————————————
1、箭头函数语法(可以和3配合使用,不报错)
export interface MessageCallback {
receiveMessage:(message: Message)=> void
}


2、普通方法语法(不能和3配合使用)

export interface MessageCallback {

  receiveMessage(message: Message): void;

}


3、类似Java创建接口匿名实现类
private msgCallback: MessageCallback = {
receiveMessage: (message: Message) => {
//todo
}
}


太坑了,几个月前 在harmony OS 9 API, 使用ArtTs 开发了一个小demo。 最近下载了新版编译器,并且使用了openHarmony 12 SDK。

好家伙,对Arkts代码有了一堆新约束。 网上资源还少,难倒了各大 Chatgpt。 几个错误提示找了半天适配方案!!!

在ArkTS(Ark TypeScript,鸿蒙系统的TypeScript开发框架)中,由于它主要面向的是前端和UI开发,其实现机制与Java等后端语言有所不同。ArkTS并不直接支持Java中的匿名内部类来实现接口的方式。然而,ArkTS提供了其他灵活的方式来达到类似的效果,比如使用函数式组件、Hooks或高阶组件等模式。

对于接口实现,ArkTS更多地依赖于TypeScript的类型系统和函数式编程的概念来组织和复用代码。如果你需要在ArkTS中模拟类似匿名内部类的行为,可以考虑使用闭包、高阶函数或类组件(如果适用)来封装逻辑。

如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部