generics - 在 Kotlin 中使用延迟初始化和通用工厂方法进行类型推断

标签 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
}

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

最佳答案

您可以像这样指定类型:

ObjectFactory.getObject<Point>(pointsFileName)

关于generics - 在 Kotlin 中使用延迟初始化和通用工厂方法进行类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47635624/

相关文章:

ios - 具有通用解码类型的网络调用

functional-programming - 在 Kotlin 中取最后 n 个元素

java - Android Studio 无法解析在 IDE 中用 Kotlin (.kt) 编写的类,但可以正常编译

java - Arrays.asList() 的限制在 Thinking in Java 4th Edition 中不成立

java - 有什么办法可以转换这些不可转换的类型吗?

ios - 将通用数组转换为 NSOrderedSet?

java - 泛型方法执行隐式转换,而非泛型方法需要显式转换

android-studio - 解决 Android Studio 中克隆的 Kotlin 应用程序缺少运行配置的问题

haskell - 为什么在 Haskell 中没有推断出多态值?

F#:为什么在重载成员函数时需要提供参数类型?