CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Kotlin 语言入门/课时/类与 OOP
RawBlame
课时目录12 节

Kotlin 语言入门

  1. 01Kotlin 是什么
  2. 02基础语法与类型
  3. 03控制流
  4. 04函数与 Lambda
  5. 05集合 API
  6. 06类与 OOP
  7. 07空安全
  8. 08协程
  9. 09JVM 与 Spring
  10. 10Android 与 Compose
  11. 11Ktor 服务端
  12. 12综合练习

类与 OOP

data class、sealed、object、泛型。

40 分钟

类与 OOP

Kotlin 的 OOP 更简洁:data class 自动生成 equals/hashCode/toString,sealed class 表达受限继承,object 单例,companion object 替代 static。

学习目标

  • 掌握 class、属性、构造函数与 data class
  • 理解 sealed class、object、companion object
  • 了解泛型与接口默认实现

类与属性

class Track(
    val slug: String,
    var title: String,
    val lessons: MutableList<Lesson> = mutableListOf()
) {
    fun addLesson(lesson: Lesson) {
        lessons.add(lesson)
    }

    val lessonCount: Int
        get() = lessons.size
}

data class Lesson(val slug: String, val title: String, val order: Int)

fun main() {
    val track = Track("kotlin-essentials", "Kotlin 语言入门")
    track.addLesson(Lesson("kt-intro", "Kotlin 是什么", 1))
    track.addLesson(Lesson("kt-syntax", "基础语法", 2))

    println("${track.title}: ${track.lessonCount} 课")
    println(track.lessons)
}

主构造函数参数可直接声明为属性;data class 适合 DTO、实体。

sealed class 与 object

sealed class Result<out T> {
    data class Success<T>(val data: T) : Result<T>()
    data class Error(val message: String) : Result<Nothing>()
    object Loading : Result<Nothing>()
}

object TrackRegistry {
    private val tracks = mutableMapOf<String, Track>()

    fun register(track: Track) {
        tracks[track.slug] = track
    }

    fun get(slug: String): Track? = tracks[slug]
}

fun handleResult(result: Result<List<Lesson>>) = when (result) {
    is Result.Success -> println("加载 ${result.data.size} 课")
    is Result.Error   -> println("错误: ${result.message}")
    Result.Loading    -> println("加载中...")
}

sealed class 子类受限,配合 when 可 exhaustiveness check;object 是线程安全单例。

接口与 companion

interface Repository {
    fun findBySlug(slug: String): Track?

    fun findAll(): List<Track> = emptyList()   // 默认实现
}

class InMemoryRepository : Repository {
    companion object {
        fun createDefault(): InMemoryRepository = InMemoryRepository()
    }

    private val store = mutableMapOf<String, Track>()

    override fun findBySlug(slug: String): Track? = store[slug]
}

fun main() {
    val repo = InMemoryRepository.createDefault()
    println(repo.findBySlug("kotlin-essentials"))
}

companion object 编译为静态成员,可替代 Java static 工厂方法。

与 Java 对照

KotlinJava
data class Lesson(...)POJO + Lombok @Data
sealed class Result受限继承 + switch pattern
object Singletonenum 单例 / 双重检查锁
companion objectstatic 方法
接口默认实现default 方法(Java 8+)

练习

  • 定义 data class Track 与 Lesson,实现 copy 修改 title
  • 用 sealed class 建模 API 响应:Success / Error / Loading
  • 写 object 单例缓存 track 列表

小结

data class、sealed、object 大幅减少样板代码。 下一课空安全。见 kotlin-essentials。

加载本节练习…
← 上一课集合 API下一课 →空安全