Android 在不知道列表类型的情况下筛选列表
我正在编写一个Kotlin函数来搜索列表,但列表类型将基于微调器的用户输入(Android 在不知道列表类型的情况下筛选列表,android,kotlin,Android,Kotlin,我正在编写一个Kotlin函数来搜索列表,但列表类型将基于微调器的用户输入(\u selectedRuleset由另一个函数设置) private val\u selectedRuleset=MutableLiveData() val selectedRuleset:LiveData get()=\u selectedRuleset 趣味搜索(术语:字符串){ val模式=term.toRegex() val规则:列表?=何时(searchTerm.value){ @抑制(“未选中的_CAST”
\u selectedRuleset
由另一个函数设置)
private val\u selectedRuleset=MutableLiveData()
val selectedRuleset:LiveData get()=\u selectedRuleset
趣味搜索(术语:字符串){
val模式=term.toRegex()
val规则:列表?=何时(searchTerm.value){
@抑制(“未选中的_CAST”)
“category1”->selectedRuleset.value作为列表
“category2”->selectedRuleset.value作为列表
“category3”->selectedRuleset.value作为列表
else->selectedRuleset.value作为列表
}
rules.filter{}
}
有没有一种方法可以将适当的列表类型强制转换为
规则
(无需使用抑制
),这样当我尝试过滤规则
时,编译器就知道它是哪种类型的列表了?您可以使Type1、Type2和Type3都实现一些公共接口,如FilterableByRegex,并且无需任何强制转换即可解决此问题。否,编译器可能无法确定类型。这是一个警告,不是错误。如果您知道该类型可以安全地强制转换到,则抑制该警告是合适的。您上面的代码看起来不安全,但我认为这是因为它不完整。在编写的代码中,演员没有做任何事情。编译器仍然认为规则是<代码>列表?< /代码> @雅各布杜克哈哈,好点。
private val _selectedRuleset = MutableLiveData<List<*>>()
val selectedRuleset: LiveData<List<*>> get() = _selectedRuleset
fun search (term: String) {
val pattern = term.toRegex()
val rules : List<*>? = when (searchTerm.value) {
@Suppress("UNCHECKED_CAST")
"category1" -> selectedRuleset.value as List<Type1>
"category2" -> selectedRuleset.value as List<Type2>
"category3" -> selectedRuleset.value as List<Type3>
else -> selectedRuleset.value as List<Type1>
}
rules.filter {}
}