Kotlin中mutableListOf<Student>泛型作用及相关大写语法疑问
Kotlin 语法问题解答
1. <Student> 泛型声明的作用
尖括号包裹的<Student>是Kotlin的泛型参数声明,作用是明确指定当前创建的可变列表允许存储的元素类型:
- 加上
<Student>后,编译器会强制校验所有插入列表的元素必须是Student类的实例,一旦插入其他类型的元素(比如字符串、数字),编译阶段就会直接报错,提前避免运行时类型错误。 - 同时编译器会自动推断列表中取出的所有元素都是
Student类型,不需要额外做类型转换就可以直接调用Student类的属性和方法,代码更简洁安全。
你提供的示例代码中val studentList = mutableListOf()没有指定泛型,编译器会默认将列表类型推断为MutableList<Any?>,也就是可以存储任意类型的元素,虽然你现在全插入Student实例可以正常运行,但如果后续误插入其他类型元素,运行时调用printValues()方法就会直接崩溃,属于不安全的写法。
2. 大写标识的命名规则
你看到的首字母大写的标识,都遵循Kotlin官方的类命名规范:
- Kotlin约定所有类、接口的名称都使用「大驼峰命名法」(帕斯卡命名法),即每个单词的首字母全部大写,比如你代码中自定义的
Student类,以及Kotlin内置的String、Int、Double等类型,本质都是类,所以首字母大写。 - 与之对应的是变量、函数的命名采用「小驼峰命名法」,首字母小写,比如
studentList、printValues、name等,通过大小写规则可以快速区分标识符的类型。
// 修改后的安全写法,明确指定列表泛型 fun main() { val studentList = mutableListOf<Student>() // 新增泛型声明 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(Student("Felix", 1299, 78.5)) for (i in studentList){ i.printValues() } }
内容的提问来源于stack exchange,提问作者Joker
相关产品推荐
相关产品推荐

