Kotlin类授权功能

时间:2017-10-18 09:28:20

标签: kotlin

我知道如何在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委托给它的方法,而不必编写所有委托方法?

1 个答案:

答案 0 :(得分:5)

Class Delegation目前仅适用于主构造函数的参数。

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

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