টাইপ হায়ারার্কির (Type Hierarchies) জন্য সিলড ক্লাস (Sealed Classes)
কোন ক্লাসগুলো একটি টাইপকে এক্সটেন্ড করতে পারবে তা সীমাবদ্ধ করুন – যা এক্সহস্টিভ সুইচকে (exhaustive switches) সক্ষম করে।
কোড তুলনা
✕ Java 8
// Anyone can extend Shape
public abstract class Shape { }
public class Circle extends Shape { }
public class Rect extends Shape { }
// unknown subclasses possible
✓ Java 17+
public sealed interface Shape
permits Circle, Rect {}
public record Circle(double r)
implements Shape {}
public record Rect(double w, double h)
implements Shape {}
এই কোডে সমস্যা দেখছেন? আমাদের জানান।
কেন আধুনিক পদ্ধতি ভালো
নিয়ন্ত্রিত হায়ারার্কি (Controlled Hierarchy)
শুধুমাত্র পারমিটেড (permitted) সাবটাইপগুলো এক্সটেন্ড করতে পারে – কোনো অপ্রত্যাশিত সাবক্লাস (surprise subclasses) নেই।
এক্সহস্টিভ ম্যাচিং (Exhaustive Matching)
কম্পাইলার সুইচ কভারের সমস্ত কেইস ভ্যারিফাই (verify) করে, ডিফল্টের প্রয়োজন নেই।
অ্যালজেব্রাইক ডেটা টাইপস (Algebraic Data Types)
সাম টাইপসকে (sum types) স্বাভাবিকভাবে মডেল করুন – sealed + records = জাভাতে ADTs।
পুরনো পদ্ধতি
ওপেন হায়ারার্কি (Open Hierarchy)
আধুনিক পদ্ধতি
sealed permits
JDK থেকে
17
কঠিনতা
মধ্যম
JDK সমর্থন
টাইপ হায়ারার্কির (Type Hierarchies) জন্য সিলড ক্লাস (Sealed Classes)
উপলব্ধ
JDK 17 LTS (সেপ্টেম্বর 2021) থেকে ব্যাপকভাবে উপলব্ধ
কীভাবে কাজ করে
সিলড ক্লাসগুলো সাবটাইপগুলোর (subtypes) একটি ক্লোজড সেট ডিফাইন করে। কম্পাইলার সমস্ত সম্ভাব্য কেইসগুলো জানে, যা ডিফল্ট ব্রাঞ্চ ছাড়াই এক্সহস্টিভ প্যাটার্ন ম্যাচিংকে সক্ষম করে। রেকর্ডগুলোর সাথে মিলিত হয়ে, এগুলো অ্যালজেব্রাইক ডেটা টাইপ (algebraic data types) মডেল করে।
সম্পর্কিত ডকুমেন্টেশন
প্রমাণ