Kotlin:从泛型集合到泛型数组

Posted

技术标签:

【中文标题】Kotlin:从泛型集合到泛型数组【英文标题】:Kotlin: Generic Collection to Generic Array 【发布时间】:2018-03-03 20:25:26 【问题描述】:

如何从通用collection 中获取通用array?

我做了以下事情:

val genericArray: Array<E> = (genericCollection as java.util.Collection<E>).toArray() as Array<E>

这是正确的方法还是有更优雅的解决方案?

期待您的帮助!

编辑

我最终编写了这个辅助扩展:

fun <E> Collection<E>.toUntypedArray(): Array<E> 
    @Suppress("UNCHECKED_CAST")
    return arrayOf(size, this) as Array<E>

你们中有人有更好的解决方案吗?

【问题讨论】:

public actual inline fun &lt;reified T&gt; Collection&lt;T&gt;.toTypedArray(): Array&lt;T&gt; 有什么问题? 这样可以吗? listOf("one", "two").toTypedArray&lt;Any&gt;() 如果不是,我不知道你到底想在这里实现什么...... 【参考方案1】:

您不必将其强制转换为 Java 集合。

fun example () 
    val collection: Collection<Int> = listOf()
    val typeArray = collection.toTypedArray()


fun <T> example2(collection: Collection<T>) 
    val typeArray = arrayof(collection)

【讨论】:

但这就是问题所在。 toTypedArray() 是一个具体化的函数,不能将泛型作为输入。 这也不起作用,因为返回一个 Array> 而不是 Array 您可以使用展开运算符解决Array&lt;Collection&lt;E&gt;&gt; 问题:arrayOf(*collection.toTypedArray())

以上是关于Kotlin:从泛型集合到泛型数组的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE基础八----<集合>泛型集合体系Collection接口中的方法

一些关于集合的不不清不楚的东西

JavaSE-泛型

Java基础:泛型

如何从泛型observable订阅PublishRelay?

Kotlin学习笔记——接口抽象类泛型扩展集合操作符与Java互操作性单例