在Kotlin中,如何委托给一个接口并只提供一个无参的公共构造函数?
问题在于Kotlin 类委托只允许委托给构造函数参数,因此似乎迫使你为构造函数提供一个参数。
以下是我有关这个问题的具体使用情况的原始问题。
我想要做到以下几点:
val myTable1: MyTable = MyTable()
哪里
-
MyTable
inheritance自ImmutableTable ( src )或至少Table - 而且我不必手动将所有的
Table
方法委托给一些基础实现。
我也想避免以下几点:
val myTable2: MyTable = MyTable.build()
即我不想被迫使用伴侣对象/静态工厂方法。
我试图扩展ImmutableTable
,但我越来越This type has a constructor, and thus must be initialized here
。
我试图扩展Table
接口并委托给它(以避免重新实现方法),但是我不得不提供一个Table
的实例作为构造参数。 我不能在init {}
块中初始化它。
请看我的确切的企图这个要点 。
使用Kotlin版本: 1.0.2
正如在评论中提到的,番石榴有ForwardingTable
,可以做到这一点。 但是,即使对于没有定义“转发”版本的接口,也应该有另一种选择。
class MyTable private constructor(table: Table) : Table by table { constructor() : this(TreeBasedTable.create()) // or a different type of table if desired }