Kotlin:扩展列表类型参数(或任何协变类型参数)的扩展函数

问题描述 投票:0回答:1

我需要一个扩展函数来扩展像 List 这样的协变容器的类型。

所以想象一下以下场景:

val listOfInts = listOf(1,2,3,4,5)

val listOfNumbers = listOfInts.widen<Number>() //would be of type List<Number>

我无法做到这一点。

我可以写下:


fun <U:Any,T:U> List<T>.widen():List<U> = this

但是,它需要像这样调用:

listOfInts.widen<Number,_>()

耶!我知道,这只是 2 个额外的字符,但它们破坏了我正在编写的库的人体工程学

请帮忙!

kotlin generics extension-methods type-level-computation
1个回答
1
投票

我一直在想办法完成这个,阅读泛型,文档本身有一个功能。类型检查和清零可能有点矫枉过正,但它更安全。

更严格:

fun <T> List<T>.widen(): List<T> = this

不太严格:来自文档

inline fun <reified T> List<*>.asListOfType(): List<T>? =
    if (all { it is T })
        @Suppress("UNCHECKED_CAST")
        this as List<T> else
        null
© www.soinside.com 2019 - 2024. All rights reserved.