Sobes.tech
Junior — Middle

გთხოვთ, ახსნათ ინვარიანტობის კონცეფცია Kotlin-ის გენერიკებში და რატომ გამოიყენება.

sobes.tech AI

პასუხი AI-სგან

Kotlin-এ ইনভারিয়ান্স মানে হল, যদি আপনার কাছে একটি সাধারণ টাইপ Generic<T> থাকে, তাহলে Generic<A> এবং Generic<B> একে অপরের সাথে উত্তরাধিকার সম্পর্ক দ্বারা সংযুক্ত নয়, এমনকি যদি A B-এর উপপ্রকার হয়। অন্য কথায়, Generic<A> Generic<B>-এর উপপ্রকার নয়, এবং বিপরীতও।

এটি গুরুত্বপূর্ণ যাতে টাইপের ত্রুটি এড়ানো যায় যখন আপনি পরিবর্তনশীল ডেটা স্ট্রাকচারগুলির সাথে কাজ করছেন। উদাহরণস্বরূপ, যদি MutableList<String> MutableList<Any>-এর উপপ্রকার হয়, তবে আপনি তালিকায় অন্য ধরনের অবজেক্ট যোগ করতে পারবেন, যা টাইপের নিরাপত্তা লঙ্ঘন করবে।

Kotlin-এ, invariance ডিফল্টভাবে পরিবর্তনশীল সংগ্রহ এবং অন্যান্য টাইপের জন্য ব্যবহৃত হয়, যেখানে সামগ্রী পরিবর্তনযোগ্য। আরও নমনীয়তার জন্য, covariancy (out) এবং contravariancy (in) রয়েছে, যা নির্দিষ্ট পরিস্থিতিতে টাইপগুলি নিরাপদে সম্প্রসারিত বা সংকুচিত করতে দেয়।

অ-invariant টাইপের উদাহরণ:

class Box<T>(var value: T)

val boxString: Box<String> = Box("text")
// val boxAny: Box<Any> = boxString // কম্পাইলার ত্রুটি: Box<String> `Box<Any>`-এর উপপ্রকার নয়।

অতএব, invariance সাধারণ টাইপের সাথে কাজ করার সময় কঠোর টাইপের নিরাপত্তা রক্ষা করতে সহায়তা করে।