在Kotlin中使用延迟初始化和通用工厂方法键入推断

时间:2017-12-04 14:32:29

标签: generics kotlin type-inference factory-method

我有一个工厂方法,可以生成一些<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
}

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以指定如下类型:

ObjectFactory.getObject<Point>(pointsFileName)