-1

// 使用简单的类 class Student(val name: String, val rollNumber: Int, val percentMarks: Double) {

fun printValues(){ println("姓名:$name,卷号:$rollNumber,百分比:$percentageMarks") } }

fun main() { val studentList = mutableListOf() studentList.add(Student("Cristina", 1290, 78.5)) studentList.add(Student("Mark", 1291, 88.25)) studentList.add(Student("Lea" , 1292, 71.0)) studentList.add(Student("Jack", 1293, 78.5)) studentList.add(Student("Anies", 1294, 78.5)) studentList.add(Student("Danielle", 1295, 78.5) ) studentList.add(Student("Sandra", 1296, 78.5)) studentList.add(Student("Katina", 1297, 78.5)) studentList.add(Student("Edgar", 1298, 78.5)) studentList.add(学生(“菲利克斯”,1299,78.5))

for (i in studentList){ i.printValues() } }

4

1 回答 1

1

我假设您在问为什么需要<Student>在调用中指定mutableListOf(). 如果不是,请澄清您的问题。

大多数时候,Kotlin会推断变量的类型,因此您不必担心编写它们。例如,你可以写val i = 42而不是val i: Int = 42因为 Kotlin 可以猜到右边表达式的类型是Int. 只有当 Kotlin 可以确定地知道表达式的类型是什么时,这才有可能(42 是一个整数文字,因此对编译器来说很容易)。

现在该函数mutableListOf()是一个泛型函数,这意味着它有一个类型参数。其返回值的类型取决于该类型参数。该表达式mutableListOf(42)对于编译器来说是可以的,因为它可以推断出mutableListOf必须是的类型参数,Int因为 42 是一个Int. 但是,mutableListOf()如果没有参数,则不会提供有关列表中元素类型的任何信息,因此编译器不知道也无法推断类型。

有两种解决方案:

  1. mutableListOf您可以通过编写明确指定的类型参数mutableListOf<Student>()。这让编译器知道mutableListOfmust be结果的类型List<Student>。反过来,这意味着它可以推断出变量的类型studentList
  2. 您也可以直接指定变量的类型,在这种情况下编译器会反过来猜测(它会知道mutableListOf的类型参数必须是Student为了符合变量的类型):
val studentList = mutableListOf() // doesn't compile, cannot infer the type
val studentList = mutableListOf<Student>() // solution 1
val sutdentList: List<Student> = mutableListOf() // solution 2
于 2021-08-17T13:21:09.257 回答