如何将在主构造函数中接收的列表转换为MutableList,以便我们可以将类委托给MutableList

时间:2019-06-03 08:21:01

标签: kotlin constructor casting delegation

我想通过添加一些线程安全功能来实现kotlin的MutableList接口,如果我想实现MutableList接口并仅覆盖对线程不安全的东西,因此我选择了委托。

每次使用List.toMutableList()都会返回一个新的MutableList实例,其中包含数据中的所有项目。

class ThreadSafeList<E> constructor(data: List<E>): MutableList<E> by data.toMutableList() //different reference (new object created when using toMutableList())
{
    private val data = data.toMutableList() //different reference (new object created when using toMutableList())
    ...

    //default constructor when no argument is supplied
    constructor(): this(listOf())

    //override, locks & stuffs for thread safety
}

期望: 我想在构造函数本身中将List强制转换为MutableList,以便实现委托与val数据保持相同的引用,但是我找不到执行该操作的方法。

1 个答案:

答案 0 :(得分:1)

经过大量研究,我终于找到了一种方法。

我将解释我是如何做到的,这可能会帮助任何遭受此问题困扰的人,

route('users.index');
//output: example.com/admin/users

在这里,我所做的也许是一个hack,但它的工作原理就像是一种魅力。这就是为什么我爱Kotlin。

您可以像平常一样创建对象,创建对象时也不需要放入in invoke乐趣,因为它会在将列表传递给对象时由kotlin编译器自动完成。