You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin使用by关键字委托时调用super出现abstract member cannot be accessed directly报错

报错原因
  • 你用到的是Kotlin的by接口委托特性,PurchaseHistory类并没有继承任何MutableList的具体实现类,只是将MutableList接口的所有默认实现转发给by关键字后mutableListOf()生成的实例处理。
  • 重写add方法时调用的super.add指向的是MutableList接口本身的抽象方法,没有实际实现,因此触发「abstract member cannot be accessed directly」报错。
  • 类外部调用add方法时,默认走委托转发逻辑,会调用内部持有的列表实例的实现,所以不会出现异常。
修复方案

将委托的列表实例提前声明为类的私有成员,重写方法时直接调用该实例的对应方法即可,示例代码如下:

class PurchaseHistory: MutableList<PurchaseInfo> by internalList {
    private val internalList = mutableListOf<PurchaseInfo>()

    override fun add(element: PurchaseInfo): Boolean {
        // 自定义业务逻辑
        return internalList.add(element)
    }
}

内容的提问来源于stack exchange,提问作者Amin Guermazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:03:03