Câu hỏi phỏng vấn Kotlin
Câu hỏi

Giải thích sự khác biệt giữa các lớp Inline **(Inli...

Câu trả lời

Các lớp Inline (Inline classes) và bí danh kiểu (type aliases) trong Kotlin đều cung cấp cách để làm việc với các kiểu dữ liệu, nhưng chúng có những đặc điểm và mục đích sử dụng khác nhau.

Bí danh kiểu (type aliases) cho phép bạn đặt tên thay thế cho các kiểu dữ liệu đã tồn tại. Điều này hữu ích khi bạn muốn rút ngắn tên của các kiểu dữ liệu phức tạp hoặc dài, hoặc khi bạn muốn sử dụng hai lớp có cùng tên nhưng thuộc các gói (package) khác nhau mà không cần phải viết đầy đủ tên gói[1][2][3][6][9]. Tuy nhiên, bí danh kiểu không tạo ra một kiểu mới mà chỉ là một cái tên thay thế cho kiểu dữ liệu gốc. Khi bạn sử dụng bí danh kiểu, trình biên dịch Kotlin sẽ mở rộng nó trở lại thành kiểu dữ liệu gốc tương ứng[6].

Các lớp Inline (Inline classes), mặt khác, được giới thiệu trong Kotlin 1.3 như một tính năng thử nghiệm và sau đó đã trở nên ổn định. Chúng cho phép bạn bọc một kiểu dữ liệu cụ thể trong một lớp mà không tạo ra chi phí về hiệu suất tại thời gian chạy do việc cấp phát bộ nhớ trên heap[1][4][5][7][8]. Các lớp Inline phải có một thuộc tính duy nhất được khởi tạo trong hàm tạo chính và không được phép có khối khởi tạo (init blocks), không có trường dữ liệu phụ trợ (backing fields), và phải là final (không thể kế thừa từ các lớp khác)[1][4]. Một điểm quan trọng là các lớp Inline tạo ra một kiểu dữ liệu mới thực sự, không tương thích về phép gán với kiểu dữ liệu gốc của nó, trong khi bí danh kiểu thì có thể[1][4].

Ví dụ, nếu bạn có một lớp Inline để đại diện cho tuổi (inline class Age(val value: Int)), bạn không thể gán một giá trị Int trực tiếp cho một...

senior

senior

Gợi ý câu hỏi phỏng vấn

middle

Sự khác biệt giữa việc tạm dừng (suspending) và chặn (blocking) là gì?

expert

Làm thế nào Kotlin coroutines tốt hơn RxKotlin/RxJava?

junior

Điểm khác biệt cơ bản giữa foldreduce trong Kotlin là gì? Khi nào nên sử dụng cái nào?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào