The main purpose of  data class is hold data , in koltin compiler automatically creates following 
- getters and setters for the constructor parameters -
- hashCode()
- equals()
- toString()
- copy()
- componentN() function
following condition should be fullfilled to create a data class
- primary constructor needs to have at least one parameter.
- All primary constructor parameters need to be marked as val or var.
- Data classes cannot be abstract, open, sealed or inner.
to exclude a property for generated implementation declare it inside data class
 data class Person(val name:String?=null, val age:Int? = null ){
    var excludeProp:Int = 34
    fun personDetails():String?{
        return "name=$name Age=$age"
    }
 }
fun main(args: Array<String>) {
    // val p1 = Person ()
    var  p1 = Person ("Justin", 27)
    val p2 = Person ("Justin", 27)
    val p3 = Person ("Justin", 26)
    println(p1) // 
    println(p1 == p2) // true 
    println(p1 == p3) // false
    p1.excludeProp = 90
    println(p1.excludeProp) // 90 
    println(p2.excludeProp) // 34 
    // use copy() when want to change some of properties of object , rest properties are unchanged 
    val newPerson = Person("Karl Bruce", 18)
    val oldPerson = newPerson.copy(age = 90)
    println(oldPerson) // Person(name=Karl Bruce, age=90)
    //Data classes and destructuring declarations
    val p5 =  Person("Chris", 45)
    val (name , age ) = p5
    print("name = $name  age =$age") //name = Chris  age =45
    //call function
   print( p5.personDetails() ) // name=Chris Age=45 
}
 

 
    
Top comments (0)