Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Khởi tạo thuộc tính trong Kotlin: by lazy vs lateinit

Giới thiệu

Kotlin cung cấp hai cơ chế trì hoãn khởi tạo thuộc tính: lateinit và by lazy. Bài viết phân biệt và hướng dẫn sử dụng.

lateinit

Dùng từ khóa lateinit trước var. Điều kiện:

  • Chỉ dùng với var (mutable).
  • Chỉ cho kiểu non-null.
  • Không dùng với kiểu nguyên thủy (Int, Double...).
  • Không có getter/setter tùy chỉnh.

Ví dụ lateinit

class Tutorial {
    lateinit var name: String

    fun checkLateInit() {
        if (this::name.isInitialized) {
            println("Your value is not assigned")
        } else {
            name = "www.tutorialspoint.com/"
            println(this.name)
        }
    }
}

fun main() {
    var obj = Tutorial()
    obj.checkLateInit()
}

Kết quả

www.tutorialspoint.com/

Lazy Initialization (by lazy)

Dùng val ... by lazy { ... }. Đặc điểm:

  • Chỉ dùng với val (immutable).
  • Kiểu non-null.
  • Khởi tạo lần đầu khi truy cập, sau đó cache giá trị.
  • Tránh khởi tạo không cần thiết.

Ví dụ by lazy

class Demo {
    val myName: String by lazy {
        println("Welcome to Lazy declaration")
        "www.tutorialspoint.com"
    }
}

fun main() {
    var obj = Demo()
    println(obj.myName)
    println("Second time call to the same object--${obj.myName}")
}

Kết quả

Welcome to Lazy declaration
www.tutorialspoint.com
Second time call to the same object--www.tutorialspoint.com

Lần gọi thứ hai không in dòng "Welcome..." vì giá trị đã được cache.

Khi nào dùng cái nào?

  • lateinit: Cần khởi tạo sau, có thể gán lại, dùng cho dependency injection, view binding.
  • by lazy: Giá trị tính toán phức tạp, chỉ cần một lần, immutable.