我编写了以下代码,但它不起作用,因为我收到未解析的引用错误。
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()
。有没有办法包装 Array 类调用默认构造函数?
我尝试了不同的方法,但它仍然不起作用。这次我得到一个不能使用&#39; T&#39;作为具体的类型参数。使用类错误。
class Population<T>(size: Int, init: () -> T) where T: Chromosome {
var population: Array<T> = Array(size, { _ -> init() })
}
答案 0 :(得分:1)
Array
类型的行为与 Java 中的数组相同。因此它很特殊,并且不适用于泛型。相反,您应该使用 Java List
方法。这意味着在 Kotlin 中使用MutableList
。
class Population<T: Chromosome>(size: Int, factory: () -> T) {
var population = MutableList(size, { factory() })
}
还要确保将Chromosome
实现为开放或抽象类。否则,您不需要使总体通用,Array
方法将再次起作用。
答案 1 :(得分:0)
您可以尝试将Population
课程视为以下代码:
class Population<T : Class<*>>(size: Int) where T: Chromosome {
...
}
使用上面的代码,您的Population
类可以获得泛型类。
我希望它可以帮到你。