@ExperimentalCoroutinesApi注解重写报错:原因及解决方法咨询
问题解析与修复方案
错误原因
这是Kotlin协程Opt-in注解机制的强制校验错误:当基类的函数/属性标记了@ExperimentalCoroutinesApi(表明这是实验性API,稳定性未达标),Kotlin要求所有重写该成员的子类必须同步添加相同的Opt-in注解,以此确认开发者清楚该API的实验性风险。
另外,如果基类本身没标记这个注解,但你在子类重写时加了,也会触发错误——Opt-in注解的使用必须在基类和子类的对应声明上保持一致。
修复方法
1. 子类同步添加Opt-in注解
如果基类的成员确实是实验性API,直接在子类的重写成员上补上对应注解即可:
import kotlinx.coroutines.ExperimentalCoroutinesApi open class BaseClass { @ExperimentalCoroutinesApi open fun experimentalFunc() { /* 基类实现 */ } } class SubClass : BaseClass() { // Kotlin 1.6+推荐用@OptIn包裹,旧版可直接用@ExperimentalCoroutinesApi @OptIn(ExperimentalCoroutinesApi::class) override fun experimentalFunc() { super.experimentalFunc() // 你的子类逻辑 } }
2. 移除不必要的注解
如果基类的成员本就不该用@ExperimentalCoroutinesApi,直接删掉基类里的该注解,子类重写时也不用保留相关标记。
3. 全局启用实验性API
要是不想在每个重写处单独加注解,可以全局配置开启该实验性API:
- 在模块的
build.gradle.kts中添加编译参数:tasks.withType<KotlinCompile> { kotlinOptions { freeCompilerArgs += "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi" } } - 或者在单个文件顶部添加文件级注解,作用于整个文件内的代码:
@file:OptIn(ExperimentalCoroutinesApi::class) import kotlinx.coroutines.ExperimentalCoroutinesApi class SubClass : BaseClass() { override fun experimentalFunc() { /* 无需单独标记 */ } }
内容的提问来源于stack exchange,提问作者wexles
相关产品推荐
相关产品推荐

