如何修复Jetpack Compose中的“val cannot be reassigned”错误
解决Jetpack Compose中"val cannot be reassigned"错误
错误原因
错误出现在Greeting函数的这一行:
modifier = Modifier
Kotlin里函数的参数默认都是不可变的val(无需显式声明),你试图给Greeting函数的modifier参数重新赋值,这就触发了"val cannot be reassigned"的错误。
正确写法示例
场景1:给Column添加独立Modifier
如果要给Column设置专属的Modifier,直接在Column上指定即可,无需修改传入的参数:
@Composable fun Greeting(name: String, modifier: Modifier = Modifier) { // 直接给Column设置Modifier,比如添加内边距 Column(modifier = modifier.padding(16.dp)) { Text( text = "Hello $name!", modifier = modifier ) Text( text = "Hello $name!", modifier = modifier ) } }
场景2:基于传入的Modifier扩展使用
如果需要把传入的Modifier和新的属性组合,通过链式调用生成新的Modifier实例即可,不用重新赋值原参数:
@Composable fun Greeting(name: String, modifier: Modifier = Modifier) { // 组合传入的Modifier和新属性,生成新的实例 val columnModifier = modifier.padding(16.dp).fillMaxWidth() Column(modifier = columnModifier) { Text( text = "Hello $name!", modifier = modifier ) Text( text = "Hello $name!", modifier = modifier ) } }
关键知识点
- Kotlin函数参数默认是
val,不可被重新赋值。 - Compose的Modifier是不可变对象,所有诸如
padding、fillMaxSize的方法都会返回新的Modifier实例,而非修改原对象。
内容的提问来源于stack exchange,提问作者John Brown
相关产品推荐
相关产品推荐

