我写下面的代码,但它不起作用,因为我得到 unresolved reference 错误 .
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类调用默认构造函数?
我尝试了不同的方法,但它仍然不起作用 . 这次我收到 Cannot use 'T' as reified type parameter. Use a class instead 错误 .
class Population<T>(size: Int, init: () -> T) where T: Chromosome {
var population: Array<T> = Array(size, { _ -> init() })
}
2 回答
Array
类型与Java中的数组相同 . 因此它很特殊,并且不适用于泛型 . 相反,你应该使用JavaList
方法 . 这意味着在Kotlin中使用MutableList
.另外一定要将
Chromosome
实现为开放或抽象类 . 否则,您不需要使总体通用,并且Array
方法将再次起作用 .您可以尝试将
Population
类作为以下代码:使用上面的代码,
Population
类可以获得泛型类 .我希望它对你有所帮助 .