我有一个工厂方法,可以生成一些 <T>
列表:
inline fun <reified T> getObject(fileName: String): List<T>
工厂方法应该用于延迟初始化,如下所示:
val points: List<Point> by lazy {
ObjectFactory.getObject(pointsFileName)
}
现在 Kotlin 编译器显然在 lambda 中没有足够的类型信息并提示:
Type inference failed:
Not enough information to infer parameter T in
inline fun <reified T> getObject(fileName: String): List<T>
Please specify it explicitly.
编译器没有考虑将延迟初始化结果分配给的类型。我可以通过在本地提供类型来解决这个问题,但这并不漂亮:
val points by lazy {
val pointsToCommunicateType: List<Point> =
ObjectFactory.getObject(pointsFileName)
pointsToCommunicateType
}
这样做的正确方法是什么?
最佳答案
您可以像这样指定类型:
ObjectFactory.getObject<Point>(pointsFileName)
关于generics - 在 Kotlin 中使用延迟初始化和通用工厂方法进行类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47635624/