× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

Lớp dữ liệu Kotlin - Kotlin Data Class

20/06/2023 14:52

Chúng ta thường tạo các lớp để chứa một số dữ liệu trong đó. Trong các lớp như vậy, một số chức năng tiêu chuẩn thường được lấy từ dữ liệu. Trong Kotlin, loại lớp này được gọi là lớp dữ liệu và được đánh dấu là data .

Ví dụ về dữ liệu:

data class Student(val name: String, val roll_no: Int)

Trình biên dịch tự động lấy các hàm sau:

  • equals()
  • hashCode()
  • toString()
  • copy()

Các quy tắc để tạo các lớp Dữ liệu –

Các lớp dữ liệu phải đáp ứng các yêu cầu sau để đảm bảo tính nhất quán:

  • Hàm tạo chính cần có ít nhất một tham số.
  • Tất cả các tham số hàm tạo chính cần được đánh dấu là val hoặc var .
  • Các lớp dữ liệu không thể trừu tượng, mở, niêm phong hoặc bên trong.
  • Các lớp dữ liệu chỉ có thể thực hiện các giao diện.

toString()

Hàm này trả về một chuỗi gồm tất cả các tham số được xác định trong lớp dữ liệu.
Ví dụ:

fun main(args: Array<String>) 
{
    //declaring a data class 
    data class man(val roll: Int,val name: String,val height:Int)
   
    //declaring a variable of the above data class 
    //and initializing values to all parameters
   
    val man1=man(1,"man",50)
       
    //printing all the details of the data class
    println(man1.toString());
}

Đầu ra:

man(roll=1, name=man, height=50)

Lưu ý:
Trình biên dịch chỉ sử dụng các thuộc tính được xác định bên trong hàm tạo chính cho các hàm được tạo tự động.
Nó loại trừ các thuộc tính được khai báo trong thân lớp.

Ví dụ:

fun main(args: Array<String>) 
{
    //declaring a data class 
    data class man(val name: String)
    {
        //property declared in class body
        var height: Int = 0;
    }
   
    //declaring a variable of the above data class and 
    //initializing values to all parameters
   
    val man1=man("manish")
    //class body properties must be assigned uniquely
    man1.height = 70
       
    //this method prints the details of class that 
    //are declared in primary constructor
    println(man1.toString());
   
    //printing the height of man1 
    println(man1.height);
}

 

Output:

man(name=manish)
70

Ở đây chiều cao không được sử dụng bởi hàm toString().

copy()

Đôi khi chúng ta cần sao chép một đối tượng, với một số thay đổi trong một số thuộc tính của nó giữ cho tất cả những thứ khác không thay đổi.
Trong trường hợp này, hàm copy () được sử dụng.

Thuộc tính của bản sao()

  • Nó sao chép tất cả các đối số hoặc thành viên được xác định trong hàm tạo chính
  • Hai đối tượng có thể có cùng giá trị tham số chính và giá trị phần thân của lớp khác nhau nếu được định nghĩa

Declaration of copy()

fun copy(name: String = this.x, age: Int = this.y) = user(x, y)
fun copy(name: String = this.x, age: Int = this.y) = user(x, y)

Example

fun main(args: Array<String>) 
{
    //declaring a data class 
    data class man(val name: String, val age: Int)
    {
        //property declared in class body
        var height: Int = 0;
    }
       
    val man1 = man("manish",18)
   
    //copying details of man1 with change in name of man
    val man2 = man1.copy(name="rahul")
   
    //copying all details of man1 to man3
    val man3 = man1.copy();
   
    //declaring heights of individual men
    man1.height=100
    man2.height=90
    man3.height=110
   
    //man1 & man3 have different class body values,
    //but same parameter values
   
    //printing info all 3 men
    println("${man1} has ${man1.height} cm height")
    println("${man2} has ${man2.height} cm height")
    println("${man3} has ${man3.height} cm height")
   
}

Output:

man(name=manish, age=18) has 100 cm height
man(name=rahul, age=18) has 90 cm height
man(name=manish, age=18) has 110 cm height

hashCode() and equals()

  • hàm hashCode () trả về một giá trị mã băm cho đối tượng.
  • Phương thức equals () trả về true nếu hai đối tượng có cùng nội dung và nó hoạt động tương tự như “==”, nhưng hoạt động khác với các giá trị Float và Double .

Khai báo hashCode() :

open fun hashCode(): Int

Thuộc tính của hashCode()

  • Hai mã hash được khai báo hai lần trên cùng một đối tượng sẽ bằng nhau.
  • Nếu hai đối tượng bằng nhau theo phương thức equals () thì mã băm
    trả về cũng sẽ giống nhau
fun main(args: Array<String>) 
{
    //declaring a data class 
    data class man(val name: String, val age: Int)
       
    val man1 = man("manish",18)
    val man2 = man1.copy(name="rahul")
    val man3 = man1.copy();
   
    val hash1=man1.hashCode();
    val hash2=man2.hashCode();
    val hash3=man3.hashCode();
   
    println(hash1)
    println(hash2)
    println(hash3)
   
    //checking equality of  these hash codes
    println("hash1 == hash 2 ${hash1.equals(hash2)}")
    println("hash2 == hash 3 ${hash2.equals(hash3)}")
    println("hash1 == hash 3 ${hash1.equals(hash3)}")
   
}

Đầu ra:

835510190 
-938448478 
835510190 
hash1 == hash 2 false 
hash2 == hash 3 false 
hash1 == hash 3 true