Generics Kotlin中具有惰性初始化和泛型工厂方法的类型推断
我有一个工厂方法,可以生成一些Generics Kotlin中具有惰性初始化和泛型工厂方法的类型推断,generics,kotlin,type-inference,factory-method,Generics,Kotlin,Type Inference,Factory Method,我有一个工厂方法,可以生成一些列表: inline fun getObject(文件名:String):列表 工厂方法应用于如下延迟初始化: val points: List<Point> by lazy { ObjectFactory.getObject(pointsFileName) } ObjectFactory.getObject<Point>(pointsFileName) val点:按惰性列出{ getObject(pointsFileName)
列表:
inline fun getObject(文件名:String):列表
工厂方法应用于如下延迟初始化:
val points: List<Point> by lazy {
ObjectFactory.getObject(pointsFileName)
}
ObjectFactory.getObject<Point>(pointsFileName)
val点:按惰性列出{
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.
类型推断失败:
没有足够的信息来推断中的参数T
内联趣味getObject(文件名:字符串):列表
请明确指定它。
编译器没有考虑延迟初始化结果将被分配到的类型。我可以通过在本地提供类型来解决这个问题,但它并不漂亮:
val points by lazy {
val pointsToCommunicateType: List<Point> =
ObjectFactory.getObject(pointsFileName)
pointsToCommunicateType
}
val通过lazy点{
val pointsToCommunicateType:列表=
getObject(pointsFileName)
指向通讯类型
}
正确的方法是什么?您可以这样指定类型:
val points: List<Point> by lazy {
ObjectFactory.getObject(pointsFileName)
}
ObjectFactory.getObject<Point>(pointsFileName)
ObjectFactory.getObject(pointsFileName)