HarmonyOS 鸿蒙Next ArkTs支持类似java的匿名内部类实现接口
HarmonyOS 鸿蒙Next ArkTs支持类似java的匿名内部类实现接口
比如声明一个接口:
export interface QDDownAndUploadHttpCallBack(){
progress(model: progressModel): void
}
在其他地方,可以不需要创建一个自定义类实现:QDDownAndUploadHttpCallBack,而是类似java的:
new QDDownAndUploadHttpCallBack(){
progress(model: progressModel): void {
xxxxx
}
}
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访问
第二种写法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。