【问题标题】:Kotlin: Generic Collection to Generic ArrayKotlin:从泛型集合到泛型数组
【发布时间】: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;() 如果不是,我不知道你到底想在这里实现什么......

标签: arrays generics collections kotlin


【解决方案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())
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多