kotlin访问匿名对象的属性

Aru*_*unM 2 kotlin

如何访问word匿名对象的对象属性

 fun main(args: Array<String>) {

        val sentence = "this is a nice sentence"

        val wordLengths: List<Any> = sentence.split(' ').map {
            object {
                val length = it.length
                val word = it
            }
        }

        wordLengths.forEach { it:Any -> println(it) }
    }
Run Code Online (Sandbox Code Playgroud)

Sla*_*law 6

您明确声明wordLengthsList<Any>, 并且Any没有wordorlength属性。您应该让 Kotlin 从 推断类型map

fun main() {
    val sentence = "This is a nice sentence"

    val wordLengths = sentence.split(' ').map {
        object {
            val word = it
            val length = it.length
        }
    }

    wordLengths.forEach {
        println("[${it.length}] ${it.word}")
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您计划在方法之外需要此对象,那么您应该创建必要的类或使用现有的类(例如Pair或其String本身)。请参阅对象表达式

请注意,匿名对象只能在本地和私有声明中用作类型。如果您使用匿名对象作为公共函数的返回类型或公共属性的类型,则该函数或属性的实际类型将是匿名对象的声明的超类型,或者Any如果您没有声明任何超类型。添加到匿名对象中的成员将不可访问。