在Kotlin中,如何委托给一个接口并只提供一个无参的公共构造函数?

问题在于Kotlin 类委托只允许委托给构造函数参数,因此似乎迫使你为构造函数提供一个参数。

以下是我有关这个问题的具体使用情况的原始问题。


我想要做到以下几点:

val myTable1: MyTable = MyTable() 

哪里

  • MyTableinheritance自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 } 
Interesting Posts