问题产生于Kotlin 类委托只允许委托构造函数参数,因此似乎迫使您为构造函数提供参数.
以下是我关于这个问题的具体用例的原始问题.
我想做以下事情:
val myTable1: MyTable = MyTable()
Run Code Online (Sandbox Code Playgroud)
哪里
MyTable继承自ImmutableTable(src)或至少Table Table方法委托给某些基本实现.我还想避免以下情况:
val myTable2: MyTable = MyTable.build()
Run Code Online (Sandbox Code Playgroud)
即我不想被迫使用伴侣对象/静态工厂方法.
我试图扩展ImmutableTable,但我得到了This type has a constructor, and thus must be initialized here.
我试图扩展Table接口和委托给它(以避免重新实现方法),但后来我被迫提供一个Table构造函数参数的实例.我不能只是在init {}块中初始化它.
请看我的确切尝试的要点.
使用的Kotlin版本: 1.0.2
正如评论中所提到的,Guava ForwardingTable可以做到这一点.但是这里的另一个选项应该适用于没有定义"转发"版本的接口.
class MyTable private constructor(table: Table<Int, Int, Int>) : Table<Int, Int, Int> by table {
constructor() : this(TreeBasedTable.create()) // or a different type of table if desired
}
Run Code Online (Sandbox Code Playgroud)