ওভারভিউ
ডেটা ক্লাস হলো একটি ক্লাস যা একটি অ্যাপ্লিকেশনের জন্য ডেটা ধারণ করে। এটি ঠিক জাভাতে আমরা যে POJO ক্লাস ব্যবহার করি ডেটা ধারণ করার জন্য তার মতো।
জাভায়, ডেটা ক্লাসের জন্য, আমাদের সেই ক্লাসের প্রপার্টিগুলো অ্যাক্সেস করার জন্য getter এবং setter মেথড তৈরি করতে হয়। কোটলিনে, যখন একটি ক্লাস ডেটা ক্লাস হিসেবে ঘোষণা করা হয়, তখন কম্পাইলার অটোমেটিক্যালি সেই ক্লাসের মেম্বার ভেরিয়েবল অ্যাক্সেস করার জন্য কিছু সাপোর্টিং মেথড তৈরি করে। কম্পাইলার getters এবং setters কনস্ট্রাক্টর প্যারামিটারগুলো জন্য, hashCode(), equals(), toString(), copy() তৈরি করে।
একটি ক্লাস কোটলিনে ডেটা ক্লাস হিসেবে বিবেচিত হওয়ার জন্য নিচের শর্তাবলী পূরণ করতে হয়:
প্রাইমারি কনস্ট্রাক্টরে কমপক্ষে একটি প্যারামিটার থাকতে হবে।
সকল প্রাইমারি কনস্ট্রাক্টর প্যারামিটার val বা var হিসেবে মার্ক করা থাকতে হবে।
ডেটা ক্লাস abstract, open, sealed, বা inner হতে পারে না।
আমরা একটি ডেটা ক্লাস এক্সটেন্ড করতে পারি না কিন্তু একই ফিচার বাস্তবায়ন করতে, আমরা একটি super class ঘোষণা করতে পারি এবং একটি sub-class-এ প্রপার্টিগুলো ওভাররাইড করতে পারি।
উদাহরণ
নিচের উদাহরণে, আমরা "Student" এবং "Book" নামে দুটি ডেটা ক্লাস তৈরি করব। আমরা "Resource" নামে একটি অ্যাবস্ট্রাক্ট ক্লাসও তৈরি করব। "Book"-এর ভেতরে, আমরা "Resource" ক্লাসের প্রপার্টিগুলো ওভাররাইড করব।
data class Student(val name: String, val age: Int)
fun main(args: Array) {
val stu = Student("Student1", 29)
val stu2 = Student("Student2", 30)
println("Student1 Name is: \${stu.name}")
println("Student1 Age is: \${stu.age}")
println("Student2 Name is: \${stu2.name}")
println("Student2 Age is: \${stu2.age}")
val b = Book(1L, "India", "123222") // অ্যাবস্ট্রাক্ট ক্লাস বাস্তবায়ন
println(b.location)
}
// সুপার ক্লাস ঘোষণা
abstract class Resource {
abstract var id: Long
abstract var location: String
}
// Resource ক্লাসের প্রপার্টিগুলো ওভাররাইড করা
data class Book(
override var id: Long = 0,
override var location: String = "",
var isbn: String
) : Resource()
আউটপুট
Student1 Name is: Student1 Student1 Age is: 29 Student2 Name is: Student2 Student2 Age is: 30 India