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 documentation,val
属性 是 属性 和 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 列表,因此无法更改其内容。
我在 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 documentation,val
属性 是 属性 和 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 列表,因此无法更改其内容。