当前位置: 首页 > 知识库问答 >
问题:

无法重新分配Val错误,即使我已将其更改为Var Kotlin

杨曜瑞
2023-03-14

我在IntelliJ中使用静态编程语言。

我有一段简短的代码

        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。

为了确保这一点,我已经在其他类中更改了同名的变量,甚至还将类中的每个变量都更改为var,我仍然会遇到这个错误。

这与可拉伸的性质有关吗?

我错过了什么或做错了什么来得到这个错误,我如何修复它?

非常感谢。

共有2个答案

曹乐意
2023-03-14

您误解了该声明中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,因此您可以用另一个var替换它。但是,它是一个不可变的列表,因此其内容不能更改。

勾俊
2023-03-14

根据Kotlin Properties and Fields文档,val属性是带有getter但没有setter的属性。var属性同时具有getter和setter。

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

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

 类似资料: