Kotlin 初学者常见错误大全:从 A 到 Z

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin 初学者最常犯的错误:从 A 到 Z

Kotlin 是一种现代、简洁且安全的语言,迅速赢得了 Android 开发者和后端工程师的青睐。然而,即使是在这样友好的语言中,初学者也常常会犯一些典型错误,这些错误会拖慢学习进度并导致 bug。在本文中,我们将剖析最常见的问题——从误解空安全到过度使用 lateinit。你将学会如何避免这些错误,并编写出简洁高效的 Kotlin 代码。



1. 忽视空安全以及对可空类型的不正确处理

Kotlin 的主要特性之一是其内置的 NullPointerException 防护机制。但初学者经常尝试使用类似 Java 的方法,从而导致错误。

错误:在没必要的情况下使用 !!(非空断言)

很多人会写:

fun getUserName(user: User?): String {    return user!!.name // 如果 user == null — 将会得到 NPE}

最好使用安全调用(?.)或 Elvis 运算符(?:):

fun getUserName(user: User?): String {    return user?.name ?: "Guest"}

错误:不正确使用 lateinit var

lateinit 字段适用于你确定变量在首次使用前会被初始化的情况(例如在 Android 的 onCreate 中)。但如果你在初始化之前访问 lateinit,会得到 UninitializedPropertyAccessException。

提示:仅对 var 使用 lateinit,并在访问前检查 ::variable.isInitialized 属性。



2. 集合的不正确使用:可变 vs 不可变

Kotlin 明确区分了 List(只读)和 MutableList。初学者经常混淆它们,导致编译错误或意外行为。

错误:尝试修改不可变列表

val list = listOf(1, 2, 3)list.add(4) // 编译错误!listOf 返回的是 List,不是 MutableList

如果你需要一个可变集合,请使用 mutableListOf:

val mutableList = mutableListOf(1, 2, 3)mutableList.add(4) // 可以工作

错误:从公共 API 返回 MutableList

这会破坏封装性。最好返回 List:

// 不好fun getItems(): MutableList<String> = mutableListOf("a", "b")

// 好fun getItems(): List<String> = mutableListOf("a", "b").toList()


3. 过度使用 companion object 而非顶层函数

Kotlin 没有静态方法,但有 companion object。初学者常常把所有东西都放进去,即使可以使用更简洁的顶层函数或属性。

错误示例:

class Utils {    companion object {        fun formatDate(date: Date): String { ... }    }}

// 调用: Utils.formatDate(...)

最好将函数移到文件级别:

// 文件: DateUtils.ktfun formatDate(date: Date): String { ... }

// 调用: formatDate(...)

这使代码更简洁,并且无需创建额外的类。仅在需要工厂方法或与类相关的常量时使用 companion object。



4. 误解密封类与 when 表达式

密封类是表示受限类层次结构的强大工具。然而,初学者经常忘记 else 分支,或者使用 if-else 代替 when,从而失去了所有优势。

错误:在密封类的 when 中使用 else

sealed class Result {    data class Success(val data: String) : Result()    data                

博客

书籍推荐