Theoretical Paper
- Computer Organization
- Data Structure
- Digital Electronics
- Object Oriented Programming
- Discrete Mathematics
- Graph Theory
- Operating Systems
- Software Engineering
- Computer Graphics
- Database Management System
- Operation Research
- Computer Networking
- Image Processing
- Internet Technologies
- Micro Processor
- E-Commerce & ERP
- Dart Programming
- Flutter Tutorial
- Numerical Methods Tutorials
- Flutter Tutorials
- Kotlin Tutorial
Practical Paper
Industrial Training
Kotlin Data class
Data class is a simple class which is used to hold data/state and contains standard functionality. A data keyword is used to declare a class as a data class.
data class User(val name: String, val age: Int)
Declaring a data class must contains at least one primary constructor with property argument (val or var).
Data class internally contains the following functions:
- equals(): Boolean
- hashCode(): Int
- toString(): String
- component() functions corresponding to the properties
- copy()
Due to presence of above functions internally in data class, the data class eliminates the boilerplate code.
A compression between Java data class and Kotlin data class
If we want to create a User entry in Java using data class, it require lots of boilerplate code.
import java.util.Objects; public class User { private String name; private int id; private String email; public User(String name, int id, String email) { this.name = name; this.id = id; this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public intgetId() { return id; } public void setId(int id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof User)) return false; User user = (User) o; return getId() == user.getId() && Objects.equals(getName(), user.getName()) && Objects.equals(getEmail(), user.getEmail()); } @Override public inthashCode() { return Objects.hash(getName(), getId(), getEmail()); } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", id=" + id + ", email='" + email + '\'' + '}'; } }
Calling the constructor of above Java data class using the object of User class as
class MyClass{ public static void main(String agrs[]){ User u = new User("Ashu",101,"mymail@mail.com"); System.out.println(u); } }
Output:
User{name='Ashu', id=101, email='[email protected]'}
The above Java data class code is rewritten in Kotlin data code in single line as
data class User(var name: String, var id: Int, var email: String)
Calling the constructor of above Kotlin data class using the object of User class as
fun main(agrs: Array) { val u = User("Ashu", 101, "mymail@mail.com") println(u) }
Output:
User(name=Ashu, id=101, [email protected])
Requirements of data class
In order to create a data class, we need to fulfill the following requirements:
- Contain primary constructor with at least one parameter.
- Parameters of primary constructor marked as val or var.
- Data class cannot be abstract, inner, open or sealed.
- Before 1.1,data class may only implements interface. After that data classes may extend other classes.
Kotlin data class toString() methods
Kotlin data class only focuses on data rather than code implementation.
Let's see a simple program without data class. In this class, we are trying to print the reference of Product class using its object.
class Product(varitem: String, var price: Int) fun main(agrs: Array) { val p = Product("laptop", 25000) println(p) }
While printing the reference of Product class, it displays the hashCode() with class name of Product. It does not print the data.
Output:
[email protected]
The above program is rewritten using data class and printing the reference of Product class and displaying the data of object. It happens because the data class internally contains the toString() which display the string representation of object .
data class Product(varitem: String, var price: Int) fun main(agrs: Array) { val p = Product("laptop", 25000) println(p) }
Output:
Product(name=laptop, price=25000)
Kotlin data classequals() and hashCode()
The equal() method is used to check other object is "equal to" current object. While doing comparison between two or more hashCode(), equals() method returns true if the hashCode() are equal, else it returns a false.
For example, let's see an example in which a normal class comparing the two references of same class Product having same data.
class Product(varitem: String, var price: Int) fun main(agrs: Array) { val p1 = Product("laptop", 25000) val p2 = Product("laptop", 25000) println(p1==p2) println(p1.equals(p2)) }
In above program, reference p1 and reference p2 has different references. Due to different reference values in p1 and p2, doing comparison displays false.
Output:
false false
The above program is rewritten using data class, printing the reference of Product class and displaying the data of object.
The hashCode() method returns hash code for the object. The hashCode() produce same integer result, if two objects are equal.
data class Product(varitem: String, var price: Int) fun main(agrs: Array) { val p1 = Product("laptop", 25000) val p2 = Product("laptop", 25000) println(p1==p2) println(p1.equals(p2)) }
Output:
true true
Kotlin data class copy() method
The data class provides a copy() method which is used to create a copy (or colon) of object. Using copy() method, some or all properties of object can be altered.
For example:
data class Product(var item: String, var price: Int) fun main(agrs: Array) { val p1 = Product("laptop", 25000) println("p1 object contain data : $p1") val p2 = p1.copy() println("p2 copied object contains default data of p1: $p2") val p3 = p1.copy(price = 20000) println("p3 contain altered data of p1 : $p3") }
Output:
p1 object contain data : Product(item=laptop, price=25000) p2 copied object contains default data of p1: Product(item=laptop, price=25000) p3 contain altered data of p1 : Product(item=laptop, price=20000)
Default and named arguments in data class
We can also assign the default arguments in primary constructor of data class. These default values can be changed later on program if required.
For example:
data class Product(var item: String = "laptop", var price: Int = 25000) fun main(agrs: Array) { val p1 = Product(price = 20000) println(p1) }
Output:
Product(item=laptop, price=20000)