在扩展 属性 中访问外部 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()
我有这样的功能,效果很好:
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()