你可以在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的一部分使用了这种方法 。