对于android中的java类,我们习惯在Activity之上声明一个int数组,如int[] intarray;
并创建所需的对象
intArray = new Int(size)。
我知道在kotlin中使用数组我需要做类似
的事情val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)
我无法做的只是全局声明对象,即
val numbers: IntArray
在kotlin中,我们声明变量如val a: Int = 1
但是如基本语法教程中所示,它不允许我像val c: Int
那样声明变量,然后在需要时初始化它。它给了我错误
属性必须初始化或抽象
声明部分出错了。因为它不允许我仅定义val numbers: IntArray
。有人能告诉我哪里出错了吗?
答案 0 :(得分:6)
val
是一个只读值,因此必须立即初始化,因为它只应设置一次。如果在创建Activity
时无法立即初始化阵列,则应将其设为var
。
这仍然需要初始化:例如,您可以使用空数组作为默认值对其进行初始化。
var numbers: IntArray = intArrayOf()
或者,您可以使用lateinit
关键字对其进行标记,以表明您还没有任何内容可以分配给它,但是您知道它会在您第一次使用它之前初始化,并且您'重新承担责任:
lateinit var numbers: IntArray
最后,您可以将其设为可以为空的IntArray,并使用null
对其进行初始化。在这里,编译器将保存您在null
时访问它,但每次访问它时,您都将被迫处理它可能是null
的事实。
var numbers: IntArray? = null
答案 1 :(得分:1)
您无法定义未初始化的常量变量。更改以下行:
val numbers: IntArray
这一个:
var numbers: IntArray? = null
那么,您可以修改数字变量值...
答案 2 :(得分:1)
val
是不可变数据变量(只读)。而是使用var
。有关更多信息,请阅读defining local variable
所以你需要的是:
var numbers: IntArray? = null // This says numbers variable is nullable
您可以随时初始化它。
答案 3 :(得分:1)
您不能定义一个未初始化的常量变量。更改以下行:
val numbers: IntArray
通过这个:
lateinit var numbers: IntArray
因此,您可以随时进行初始化。