输入类数组的类型和大小时出现错误
我尝试过:
fun main(args :Array<String>) {
class modul() {
var nommodul: String? = null
var coeff: Int? = null
var note: Int? = null
}
var releve
class notes() {
var releve: array<modul>(10){""} here the erreur
}
}
答案 0 :(得分:1)
首先,您的代码有几个错误。这可能是MCVE和/或复制粘贴问题,但是在开始使用阵列之前,我需要解决这些问题。
不允许在var releve
类之前使用 notes
。您没有分配它,也没有声明类型,并且如果您从问题中复制粘贴代码,编译器将抱怨。
第二,数组var本身:Array
是大写的,并且初始化是独立的。这样会更有效(请注意,这仍然行不通-该解决方案将在此答案后面提供):
var releve: Array<modul> = Array(10) {...}
// or
var releve = Array<modul>(10) {...}
关于数组本身的最后一件事:请阅读the language conventions,尤其是命名的。您的课程都应该以大写字母开头。
Kotlin数组在很多方面与Java数组有很大不同,但是最值得注意的是直接数组初始化还需要一个初始化程序。
应该使用方括号创建一个新实例,而您不会这样做。您创建的字符串(在您的情况下不是modul
)。
有多种方法可以解决此问题,具体取决于您要执行的操作。
如果有要添加到阵列的实例,则可以使用arrayOf
:
arrayOf(modulInstance, modulInstance2, ...)
如果要直接创建它们,可以使用以下方法:
var releve = Array(10) { modul() }
关于这两个方面的注释:由于初始化,您将获得自动类型推断,而无需显式声明<modul>
如果要使用Java样式的数组,则需要一个null数组。
有两种方法可以做到这一点:
var releve = arrayOfNulls<modul>(10)
// or
var releve = Array<modul?>(10) { null }
我强烈推荐第一个,因为它更干净。我不确定在性能方面是否存在差异。
请注意,这确实会为数组推断可为空的类型,但是它使您可以以类似于Java的方式使用数组。此时的初始化就像Java:releve[i] = modul()
。如果您有要添加到每个类的参数并且需要手动添加,则此方法最有用。使用手动初始化程序还可以为您提供一个索引(see the documentation),您可以在初始化时使用它。
请注意,如果您使用for循环进行初始化,则也可以使用Array(10) { YourClass() }
,如果需要任何对索引敏感的信息(例如函数参数),则可以使用提供的索引。使用for循环当然没有错,但是可以更干净。
答案 1 :(得分:0)
这里是kotlin数组初始化的一些示例:
库方法数组
val strings = arrayOf("January", "February", "March")
原始数组
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)
带索引的最新初始化
val array = arrayOfNulls<Number>(5)
for (i in array.indices) {
array[i] = i * i
}
有关详情,请参见Kotlin - Basic Types