Val cannot be reassigned 错误,即使我已经将其更改为 Var Kotlin

Val cannot be reassigned error even though I have already changed it to Var Kotlin

我在 IntelliJ 中使用 Kotlin。

我有一段简短的代码

        val myLayoutView = v.findViewById(R.id.layout) as LinearLayout
        var myImageView = v.findViewById(R.id.image) as ImageView
        val myLabelView =v.findViewById(R.id.label) as TextView

        var app = getItem(position) as AppObject
        myLabelView.text = app.appName
        myImageView.drawable = app.appImage

为什么它在线上告诉我:

        myImageView.drawable = app.appImage

“无法重新分配 Val”的任何实例 val 已完全更改为 var 相对于提到的变量。

我已经在其他 classes 中更改了同名变量,只是为了确定,甚至将 class 中的每个变量都更改为 var,但我仍然收到此错误。

跟drawable的性质有关系吗?

我遗漏了什么或做错了什么导致出现此错误,我该如何解决?

谢谢!

根据 Kotlin Properties and Fields documentationval 属性 是 属性 和 getter,但没有 setter。 var 属性 有 getter 和 setter.

如果您查看 ImageView,它有一个 getDrawable(),但没有 setDrawable() 方法。 Kotlin 会自动将 Java 类 中的 getter 转换为属性,这就是您完全可以使用 myImageView.drawable 的原因。但是,由于没有 setDrawable() 方法,因此是 val 属性.

您需要使用setImageDrawable()等方法来设置图像。

您误解了该语句中 var 的含义。

“var myImageView”表示“var myImageView”的值可以改变。换句话说,您可以为其分配不同的 ImageView。它不适用于内容。

一个更好的例子:

val list = mutableListOf(1, 2, 3)
var list2 = listOf(1, 2, 3)

list.add(5)            <----- Yes
list2.add(5)           <----- No

list = mutableListOf(3, 4, 5)   <----- No
list2 = mutableListOf(3, 4, 5)  <----- Yes

“列表”定义为 val,因此您无法替换它。但由于它是一个可变列表,您可以更改其内容

“list2”被定义为一个 var,因此您可以将其替换为另一个。但是,它是一个 non-mutable 列表,因此无法更改其内容。