Khai báo và biểu thức đối tượng Kotlin

Trong bài này, bạn sẽ tìm hiểu về khai báo đối tượng (singleton) và biểu thức đối tượng với sự trợ giúp của các ví dụ.

Khai báo đối tượng

Singleton là một mẫu hướng đối tượng trong đó một lớp chỉ có thể có một thể hiện (đối tượng).

Ví dụ: bạn đang làm việc một ứng dụng có phụ trợ cơ sở dữ liệu SQL. Bạn muốn tạo một nhóm kết nối để truy cập cơ sở dữ liệu trong khi sử dụng lại cùng một kết nối cho tất cả các máy khách. Đối với điều này, bạn có thể tạo kết nối thông qua lớp singleton để mọi máy khách có cùng một kết nối.

Kotlin cung cấp một cách dễ dàng để tạo các thẻ đơn bằng cách sử dụng tính năng khai báo đối tượng. Đối với điều đó, từ khóa đối tượng được sử dụng.

 đối tượng SingletonExample (… // nội dung của lớp…)

Đoạn mã trên kết hợp khai báo lớp và khai báo một trường hợp SingletonExample của lớp.

Một khai báo đối tượng có thể chứa các thuộc tính, phương thức, v.v. Tuy nhiên, chúng không được phép có các hàm tạo (điều này có ý nghĩa). Tại sao?

Tương tự như các đối tượng của một lớp bình thường, bạn có thể gọi các phương thức và truy cập thuộc tính bằng cách sử dụng .ký hiệu.

Ví dụ: Khai báo đối tượng

 object Test ( private var a: Int = 0 var b: Int = 1 fun makeMe12(): Int ( a = 12 return a ) ) fun main(args: Array) ( val result: Int result = Test.makeMe12() println("b = $(Test.b)") println("result = $result") )

Khi bạn chạy chương trình, đầu ra sẽ là:

 b = 1 kết quả = 12

Khai báo đối tượng có thể kế thừa từ các lớp và giao diện theo cách tương tự như các lớp bình thường.

Singletons và tiêm phụ thuộc

Khai báo đối tượng đôi khi có thể hữu ích. Tuy nhiên, chúng không lý tưởng trong các hệ thống phần mềm lớn tương tác với nhiều phần khác của hệ thống.

Bài đọc được đề xuất: Mẫu thiết kế Dependency Injection & Singleton

Biểu thức đối tượng Kotlin

Từ khóa đối tượng cũng có thể được sử dụng để tạo các đối tượng của một lớp ẩn danh được gọi là các đối tượng ẩn danh. Chúng được sử dụng nếu bạn cần tạo một đối tượng sửa đổi nhẹ một số lớp hoặc giao diện mà không cần khai báo một lớp con cho nó. Ví dụ ,

 window.addMouseListener (đối tượng: MouseAdapter () (ghi đè chuột thú vịClicked (e: MouseEvent) (//…) ghi đè chuột thú vịEntered (e: MouseEvent) (//…)))

(Ví dụ được lấy từ trang tài liệu chính thức của Kotlin.)

Ở đây, một đối tượng ẩn danh được khai báo mở rộng lớp MouseAdapter, chương trình ghi đè hai MouseAdapterphương thức: mouseClicked()mouseEntered().

Nếu cần, bạn có thể gán tên cho đối tượng ẩn danh và lưu trữ nó trong một biến. Ví dụ,

 val obj = object: MouseAdapter () (ghi đè fun mouseClicked (e: MouseEvent) (//…) ghi đè fun mouseEntered (e: MouseEvent) (//…))

Ví dụ: Biểu thức đối tượng Kotlin

 open class Person() ( fun eat() = println("Eating food.") fun talk() = println("Talking with people.") open fun pray() = println("Praying god.") ) fun main(args: Array) ( val atheist = object : Person() ( override fun pray() = println("I don't pray. I am an atheist.") ) atheist.eat() atheist.talk() atheist.pray() ) 

Khi bạn chạy chương trình, đầu ra sẽ là:

Ăn uống. Nói chuyện với mọi người. Tôi không cầu nguyện. Tôi là một người vô thần.

Ở đây, đối tượng ẩn danh được lưu trữ trong biến vô thần, thực hiện lớp Person với pray()phương thức bị ghi đè.

Nếu bạn đang triển khai một lớp có hàm tạo để khai báo một đối tượng ẩn danh, bạn cần phải truyền các tham số hàm tạo thích hợp. Ví dụ,

 open class Person(name: String, age: Int) ( init ( println("name: $name, age: $age") ) fun eat() = println("Eating food.") fun talk() = println("Talking with people.") open fun pray() = println("Praying god.") ) fun main(args: Array) ( val atheist = object : Person("Jack", 29) ( override fun pray() = println("I don't pray. I am an atheist.") ) atheist.eat() atheist.talk() atheist.pray() ) 

Khi bạn chạy chương trình, đầu ra sẽ là:

Tên: Jack, tuổi: 29 Đang ăn thức ăn. Nói chuyện với mọi người. Tôi không cầu nguyện. Tôi là một người vô thần.

thú vị bài viết...