在扩展 属性 中访问外部 this

Accessing outer this in extension property

我有这样的功能,效果很好:

private fun <T : CSName> List<T>.toStringArray() = list<String>().apply {
    for (hasName in this@toStringArray) add(hasName.name)
}.toTypedArray()

我想将其转换为 属性 语法,如下所示:

private val <T : CSName> List<T>.asStringArray get() = list<String>().apply {
    for (hasName in this@asStringArray) add(hasName.name)
}.toTypedArray()

但它无法编译。 Android Studio 甚至在自动完成中建议这样做,但这是错误的。我不确定 problem/bug 在哪里。 Android Studio 自动完成错误?这在科特林中甚至可能吗?

您应该明确指定 属性:

的类型
private val <T : CSName> List<T>.asStringArray: Array<String>
    get() = list<String>().apply {
        for (hasName in this@asStringArray) add(hasName.name)
    }.toTypedArray()

顺便说一句,使用 map 函数可以用更少的代码实现相同的结果:

private val <T : CSName> List<T>.asStringArray get() = map { it.name }.toTypedArray()