Kotlin - Thuốc generic
Giống như Java, Kotlin cung cấp thứ tự gõ biến cao hơn được gọi là Generics. Trong chương này, chúng ta sẽ tìm hiểu cách Kotlin triển khai Generics và với tư cách là một nhà phát triển, chúng ta có thể sử dụng những chức năng được cung cấp bên trong thư viện generics như thế nào. Triển khai khôn ngoan, generics khá giống với Java nhưng nhà phát triển Kotlin đã giới thiệu hai từ khóa mới“out” và “in” để làm cho mã Kotlin dễ đọc và dễ dàng hơn cho nhà phát triển.
Trong Kotlin, một lớp và một kiểu là những khái niệm hoàn toàn khác nhau. Theo ví dụ, Danh sách là một lớp trong Kotlin, trong khi Danh sách <Chuỗi> là một kiểu trong Kotlin. Ví dụ sau mô tả cách triển khai generic trong Kotlin.
fun main(args: Array<String>) {
val integer: Int = 1
val number: Number = integer
print(number)
}
Trong đoạn mã trên, chúng tôi đã khai báo một “số nguyên” và sau đó chúng tôi đã gán biến đó cho một biến số. Điều này có thể xảy ra vì “Int” là một lớp con của lớp Số, do đó việc chuyển đổi kiểu diễn ra tự động trong thời gian chạy và tạo ra kết quả là “1”.
Hãy để chúng tôi tìm hiểu thêm điều gì đó về generic trong Kotlin. Tốt hơn là sử dụng kiểu dữ liệu chung bất cứ khi nào chúng ta không chắc chắn về kiểu dữ liệu mà chúng ta sẽ sử dụng trong ứng dụng. Nói chung, trong Kotlin generic được định nghĩa bởi<T>trong đó “T” là viết tắt của mẫu, có thể được xác định động bằng trình biên dịch Kotlin. Trong ví dụ sau, chúng ta sẽ thấy cách sử dụng các kiểu dữ liệu chung trong ngôn ngữ lập trình Kotlin.
fun main(args: Array<String>) {
var objet = genericsExample<String>("JAVA")
var objet1 = genericsExample<Int>(10)
}
class genericsExample<T>(input:T) {
init {
println("I am getting called with the value "+input)
}
}
Trong đoạn mã trên, chúng ta đang tạo một lớp với kiểu trả về chung, được biểu thị là <T>. Hãy xem phương thức main, nơi chúng ta đã xác định động giá trị của nó khi chạy bằng cách chứng minh kiểu giá trị, trong khi tạo đối tượng của lớp này. Đây là cách giải thích generics bằng trình biên dịch Kotlin. Chúng tôi sẽ nhận được kết quả sau trong trình duyệt, khi chúng tôi chạy mã này trong nền tảng mã hóa của mình.
I am getting called with the value JAVA
I am getting called with the value 10
Khi chúng ta muốn chỉ định loại chung cho bất kỳ loại siêu nào của nó, thì chúng ta cần sử dụng từ khóa “out” và khi chúng ta muốn chỉ định loại chung cho bất kỳ loại phụ nào của nó, thì chúng ta cần sử dụng “in” từ khóa. Trong ví dụ sau, chúng tôi sẽ sử dụng từ khóa "out". Tương tự, bạn có thể thử sử dụng từ khóa “in”.
fun main(args: Array<String>) {
var objet1 = genericsExample<Int>(10)
var object2 = genericsExample<Double>(10.00)
println(objet1)
println(object2)
}
class genericsExample<out T>(input:T) {
init {
println("I am getting called with the value "+input)
}
}
Đoạn mã trên sẽ mang lại kết quả sau trong trình duyệt.
I am getting called with the value 10
I am getting called with the value 10.0
genericsExample@28d93b30
genericsExample@1b6d3586