Data classes in Kotlin

前端 未结 3 1236
谎友^
谎友^ 2021-02-20 18:21

What is the difference between:

Definition 1

data class Person (var name:String, var age:Int)

Definition 2

class Person (va         


        
3条回答
  •  轮回少年
    2021-02-20 19:04

    Definition 1 (data class Person(var name: String, var age: Int) is the equivalent of

    /* every class by default in kotlin is final but a data class CAN'T be open */
    final class Person(var name: String, var age: Int) {
        override fun equals(other: Any?): Boolean {
            if (this === other) return true
            if (other?.javaClass != javaClass) return false
    
            other as Person
    
            if (name != other.name) return false
            if (age != other.age) return false
    
            return true
        }
    
        override fun hashCode(): Int {
            var result = name.hashCode()
            result = 31 * result + age
            return result
        }
    }
    
    val person = Person("Name", 123)
    

    Definition 2 (class Person(var name: String, var age: Int [no data modifier]) is the equivalent of

    class Person(var name: String, var age: Int) {
    }
    
    val person = Person("Name", 123)
    

    Definition 3 is the equivalent of

    class Person() {
        var name: String = ""
        var age: Int = 1
    }
    
    val person = Person() // name = "", age = 1 (by default)
    person.name = "Name"
    person.age = 123
    

提交回复
热议问题