我有一个工厂方法,可以生成一些<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
}
这样做的正确方法是什么?
答案 0 :(得分:3)
您可以指定如下类型:
ObjectFactory.getObject<Point>(pointsFileName)