如何在kotlin中全局定义全局

时间:2017-05-25 11:06:46

标签: android kotlin

对于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。有人能告诉我哪里出错了吗?

4 个答案:

答案 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

因此,您可以随时进行初始化。