【问题标题】:Kotlin class delegation featuresKotlin 类委托功能
【发布时间】:2018-03-30 03:14:04
【问题描述】:

这就是我知道在 Kotlin 中创建类委托的方式:

class CustomList<T>(private val data: ArrayList<T> = ArrayList<T>()) : List<T> by data

但是,我不想将数据放在构造函数中,因为我希望在创建CustomList 时列表为空:

class CustomList<T> : List<T> by data { 
    private val data = ArrayList<T>()
}

这似乎不起作用。

如何使 data 成为内部字段,并将 List 委托给它的方法,而不必编写所有委托方法?

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    Class Delegation 目前只能用于主构造函数的参数。

    解决方法:将主构造函数声明为私有并提供一个委托给它的公共构造函数。

    class CustomList<T> private constructor(private val data: List<T>) : List<T> by data {
        constructor() : this(ArrayList())
    }
    

    【讨论】:

    • 使用listOf() 而不是ArrayList()。无需指定ArrayList
    • @Joshua 一般来说你是对的,但是OP的原始代码实例化了ArrayList&lt;T&gt;()
    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2019-04-11
    • 2012-11-14
    • 1970-01-01
    相关资源
    最近更新 更多