Kotlin 如何使用“多个”筛选单个列表;个案;在科特林

Kotlin 如何使用“多个”筛选单个列表;个案;在科特林,kotlin,kotlin-extension,Kotlin,Kotlin Extension,我有一个密封类,如下所示:- sealed class SoundEffect { sealed class Acoustic : SoundEffect() { object Active : Acoustic() object Inactive : Acoustic() object Disable : Acoustic() object Enable : Acoustic() } sealed c

我有一个密封类,如下所示:-

sealed class SoundEffect {
    sealed class Acoustic : SoundEffect() {

        object Active : Acoustic()
        object Inactive : Acoustic()

        object Disable : Acoustic()
        object Enable : Acoustic()
    }

    sealed class Electronic(open val message: String) : SoundEffect() {
        data class Moog(override val message: String) : Electronic(message)
    }

    sealed class Vocal(open val dataMap: MutableMap<String, Any>) : SoundEffect() {
        data class Lieder(override val dataMap: MutableMap<String, Any> = mutableMapOf()) : Vocal(dataMap)
    }
}
这种方法在科特林可行吗


如何指定
multipleFilter
函数?

确切地说,此语法不起作用,带有
的分支是…
只允许在
时使用。但是为什么不为每个人提供一个

sounds.forEach {
    when(it) {
        is SoundEffect.Acoustic -> process(it)
        is SoundEffect.Electronic -> process(it)
        is SoundEffect.Vocal -> process(it)
    }
}

it
将在每个分支中进行智能强制转换,并最终调用正确的重载)

确切地说,此语法不起作用,带有
的分支是…
只允许在
中当
时使用。但是为什么不为每个人提供一个

sounds.forEach {
    when(it) {
        is SoundEffect.Acoustic -> process(it)
        is SoundEffect.Electronic -> process(it)
        is SoundEffect.Vocal -> process(it)
    }
}
it
将在每个分支中进行智能转换,并最终调用正确的重载)

在哪里定义了
process()
?如果它是在
SoundEffect
中定义的,那么好的老式多态性是否可以将所有这些都简化为
sounds.forEach{it.process()}
?在哪里定义了
process()
?如果它是在
SoundEffect
中定义的,那么好的老式多态性能否将所有这些简化为
sounds.forEach{it.process()}
sounds.multipleFilter {
    is SoundEffect.Acoustic -> forEach { acoustic -> process(acoustic) }
    is SoundEffect.Electronic -> forEach { electronic -> process(electronic) }
    is SoundEffect.Vocal -> forEach { vocal -> process(vocal) }
}
sounds.forEach {
    when(it) {
        is SoundEffect.Acoustic -> process(it)
        is SoundEffect.Electronic -> process(it)
        is SoundEffect.Vocal -> process(it)
    }
}