Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在不知道列表类型的情况下筛选列表_Android_Kotlin - Fatal编程技术网

Android 在不知道列表类型的情况下筛选列表

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”

我正在编写一个Kotlin函数来搜索列表,但列表类型将基于微调器的用户输入(
\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 {}
}