我需要一个扩展函数来扩展像 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 个额外的字符,但它们破坏了我正在编写的库的人体工程学
请帮忙!
我一直在想办法完成这个,阅读泛型,文档本身有一个功能。类型检查和清零可能有点矫枉过正,但它更安全。
更严格:
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