与Kotlin中的伴随对象一起扩展类

我写下面的代码,但它不起作用,因为我得到一个未解决的参考错误。

class Chromosome { constructor() {} companion object { fun newInstance(): Chromosome { return Chromosome() } } } class Population<T>(size: Int) where T: Chromosome { var population: Array<T> = Array(size, { _ -> T.newInstance() }) } 

我想要一个扩展某个类或接口的泛型类型T. 我需要调用静态工厂方法,因为我不能在Array类构造函数中写T() 。 有什么办法来包装数组类调用默认的构造函数?

我尝试了一种不同的方法,但它仍然不起作用。 这次我得到一个不能使用'T'作为通用类型参数。 使用类而不是错误。

 class Population<T>(size: Int, init: () -> T) where T: Chromosome { var population: Array<T> = Array(size, { _ -> init() }) } 

Array类型的作用与Java中的数组相同。 因此它是非常特殊的,不适用于仿制药。 相反,您应该使用Java List方法。 这意味着在Kotlin中使用MutableList

 class Population<T: Chromosome>(size: Int, factory: () -> T) { var population = MutableList(size, { factory() }) } 

也一定要把Chromosome作为开放或抽象的类来实现。 否则,你不需要使人口具有通用性,而且Array方法可以再次工作。

你可以尝试你的Population类如下所示的代码:

  class Population<T : Class<*>>(size: Int) where T: Chromosome { ... } 

使用上面的代码,您的Population类可以获得泛型的类。

我希望它可以帮助你。