为何MutableList<List<Restaurant?>>访问首元素时出现类型不匹配错误?
问题分析与解决
你的问题核心不是List和MutableList的区别,而是修改类型时不小心多嵌套了一层列表结构:
类型不匹配的原因
你之前用List时逻辑正常,说明原来的restaurantList类型是List<Restaurant?>(单层列表,每个元素是Restaurant?)。但现在改成MutableList<List<Restaurant?>>后,restaurantList变成了列表的列表——外层是可变列表,每个元素又是一个List<Restaurant?>。这时候
restaurantList[0]取到的是内层的整个列表(类型为List<Restaurant?>),而你的main变量类型是Restaurant?,两者类型完全不兼容,所以会报错。两种解决方向
如果
restaurantList本来就应该是单层列表(直接存储Restaurant?元素),把参数类型改成MutableList<Restaurant?>即可:@Composable fun ComposeMapDemo(restaurantList: MutableList<Restaurant?>, navController: NavController){ var main by remember{ mutableStateOf<Restaurant?>(null) } if (restaurantList.isNotEmpty()){ main = restaurantList[0] } }如果确实需要两层列表(比如按分组存储餐厅),则要明确取内层列表中的具体元素,同时要处理内层列表为空的情况:
@Composable fun ComposeMapDemo(restaurantList: MutableList<List<Restaurant?>>, navController: NavController){ var main by remember{ mutableStateOf<Restaurant?>(null) } // 先判断外层和内层列表都不为空 if (restaurantList.isNotEmpty() && restaurantList[0].isNotEmpty()){ main = restaurantList[0][0] // 取第一个分组的第一个餐厅 } }
内容的提问来源于stack exchange,提问作者Deusnominus
相关产品推荐
相关产品推荐

