你可以在Kotlin有一个通用的主要构造函数吗?
这将工作:
class Generic(thingy: R) { val x = thingy.getX() }
但参数R
实际上不应该是类签名的一部分。 只有在施工时才有意义。 通用方法的types参数与类的types参数无关。
但是,这不起作用:
class Generic(thingy: R) { val x = thingy.getX() }
这也不是:
class Generic(thingy: R) { val x = thingy.getX() }
我没有在文档中find答案。
这是不可能的。
但是,您可以通过使用工厂方法来获得所需的结果:
interface HasX { val x: V } class Generic(val x: Int) { companion object { fun > create(thingy: R) = Generic(thingy.x) } } val result: Generic = Generic.create(object : HasX { override val x: Int = 12 })
通常,工厂方法以小写开头(例如mutableList
),没有什么能阻止你以不同的方式进行:
fun > Generic(thingy: X):Generic = Generic(thingy.x) val result: Generic = Generic(object : HasX { override val x: Int = 12 })
正如@Alexey Romanow所述,Kotlin stdlib的一部分使用了这种方法 。