首页 > 解决方案 > Kotlin:返回数组如果 E 是实现接口 I 的枚举类,则从返回类型为 Array 的函数

问题描述

标签: kotlinenumstype-mismatchgeneric-variance

解决方案


在 Kotlin 中,与 Java 不同,Array<T>在 上是不变的T,因此,因为E那是 的子类型IArray<E>并且Array<I>不是彼此的子类型。请参阅:方差

鉴于Array<T>类型还存储项目类型并且不能完全未经检查的强制转换,解决此问题的最佳方法是创建一个单独的数组。

您可以通过手动创建一个数组并用项目填充它来做到这一点,例如在您的示例中(或使用构造函数Array(n) { ... }),或者使用.toTypedArray()应用于数组的列表表示(.asList()):

fun getMoreInterfaces(): Array<I> {
    return E.values().asList().toTypedArray()
}

(可运行样本)

List<I>但基本上,如果你不是在性能关键的代码中,你可以只使用 a ,这对于 Kotlin 来说比使用数组更惯用,也更简单。

另请参阅:Kotlin 中列表和数组类型之间的区别


推荐阅读