Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics Kotlin中具有惰性初始化和泛型工厂方法的类型推断_Generics_Kotlin_Type Inference_Factory Method - Fatal编程技术网

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)