Kotlin中Val cannot be reassigned错误:如何修改Polyline对象?
解决Kotlin「Val cannot be reassigned」错误(针对polyLine.outlinePaint)
你把polyLine改成var还报错,核心原因不是polyLine变量不可变,而是**polyLine的outlinePaint成员本身是val类型,不能直接重新赋值**。下面分两种场景给出解决方案:
场景1:只需修改Paint的属性(无需替换整个outlinePaint)
如果outlinePaint的类型是可变对象(比如Android的Paint类),直接修改它的内部属性即可,不用重新赋值整个outlinePaint:
// 示例:修改线条颜色、宽度等属性 polyLine.outlinePaint.apply { color = android.graphics.Color.RED strokeWidth = 2f style = android.graphics.Paint.Style.STROKE }
场景2:必须替换整个outlinePaint对象
如果需要用全新的Paint对象替换outlinePaint,分两种情况处理:
情况A:Polyline是数据类
Kotlin数据类自带copy()方法,可以生成保留原有属性、仅替换指定字段的新对象,再赋值给var类型的polyLine:
// 创建新的Paint对象并配置属性 val newOutlinePaint = android.graphics.Paint().apply { color = android.graphics.Color.BLUE strokeWidth = 3f } // 生成新的Polyline对象替换原变量 polyLine = polyLine.copy(outlinePaint = newOutlinePaint)
情况B:Polyline不是数据类
查看Polyline类的文档或源码,确认是否提供了修改outlinePaint的方法(比如setOutlinePaint());如果没有,就通过构造方法创建新的Polyline对象,传入原有属性和新的outlinePaint:
val newOutlinePaint = android.graphics.Paint().apply { /* 配置属性 */ } // 假设Polyline的构造方法接收原有属性和outlinePaint polyLine = Polyline(polyLine.points, newOutlinePaint, polyLine.otherProperty)
内容的提问来源于stack exchange,提问作者Pannam
相关产品推荐
相关产品推荐

